Closed kyakuno closed 3 months ago
現状のtranspose関数は下記となっている。
void transpose(const cv::Mat& simg, cv::Mat& dimg, std::vector<int> swap = {2, 0, 1}) { std::vector<int> size0; if (simg.rows > 0) { size0 = {simg.rows, simg.cols, simg.channels()}; } else { size0 = {simg.size[0], simg.size[1], simg.size[2]}; } std::vector<int> size1 = {size0[swap[0]], size0[swap[1]], size0[swap[2]]}; dimg = cv::Mat(size1.size(), &size1[0], simg.type()); }
ここで、dimgのcv::Matにsimg.type()を引き継いでいるが、imreadした画像のMatはCV_32FC3であり、transpose後の値としては正しくない。下記のようにCV_32FC1にするのが正しい。
dimg = cv::Mat(size1.size(), &size1[0], CV_32FC1);
cv::imreadした直後は、CV_8UC3が入り、transform関数でCV_32FC3を設定している。その後、transposeもCV_32FC3を引き継ぐが、transposeではCV_32FC1が望ましい。
現状のtranspose関数は下記となっている。
ここで、dimgのcv::Matにsimg.type()を引き継いでいるが、imreadした画像のMatはCV_32FC3であり、transpose後の値としては正しくない。下記のようにCV_32FC1にするのが正しい。
cv::imreadした直後は、CV_8UC3が入り、transform関数でCV_32FC3を設定している。その後、transposeもCV_32FC3を引き継ぐが、transposeではCV_32FC1が望ましい。