您好我在版本3.4中使用opencv并想要读取图像(* .pgm)然后将其转换为CV_32SC1
。因此我使用以下代码(部分):
img = imread(f, CV_LOAD_IMAGE_GRAYSCALE);
img.convertTo(imgConv, CV_32SC1);
问题是如下,所有像素都转换为零,我不明白为什么。我正在检查(和imshow("Image", imgConv);
)
cout << static_cast<int>(img.at<uchar>(200,100));
cout << static_cast<int32_t>(imgConv.at<int32_t>(200,100)) << endl;
在我的例子中,这导致了
74 74
我测试了图像的几个点,所有像素都是一样的,但不应该将它们自动转换为32位范围,还是我必须手动管理?
您必须手动管理它。这就是为什么cv::Mat::convertTo()
有另一个参数,一个比例。例如,如果你想通常从CV_8U
转换为CV_32F
img.convertTo(img2, CV_32F, 1.0/255.0);
缩放到典型的浮点值范围。我不确定你对CV_32SC1
的预期范围是什么,因为你从无符号到签名,但只是添加你觉得正确的比例因子。