来自CV_8UC1的OpenCV ConvertTo CV_32SC1

问题描述 投票:0回答:1

您好我在版本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位范围,还是我必须手动管理?

opencv c++11
1个回答
1
投票

您必须手动管理它。这就是为什么cv::Mat::convertTo()有另一个参数,一个比例。例如,如果你想通常从CV_8U转换为CV_32F

img.convertTo(img2, CV_32F, 1.0/255.0);

缩放到典型的浮点值范围。我不确定你对CV_32SC1的预期范围是什么,因为你从无符号到签名,但只是添加你觉得正确的比例因子。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.