Второй аргумент для cv::imread
- cv :: ImreadModes , поэтому строка:
src = imread("diw3.jpg", CV_32F);
неверна; вероятно, это должно быть:
cv::Mat src_8u = imread("diw3.jpg", cv::IMREAD_GRAYSCALE);
src_8u.convertTo(src, CV_32FC1);
, который будет читать изображение как 8-битное изображение в оттенках серого и преобразовывать его в значения с плавающей запятой.
l oop должно выглядеть примерно так это:
Mat downsampled = Mat::zeros(240, 180, CV_32FC1);
for (int i = 0; i < downsampled.rows; i++) {
for (int j = 0; j < downsampled.cols; j++) {
downsampled.at<float>(i,j) = dst.at<float>(2*i,2*j);
}
}
обратите внимание, что аргумент для cv::Mat::zeros
равен CV_32FC1
(1 канал, с 32-битными плавающими значениями), поэтому следует использовать метод Mat::at<float>
.