我尝试了以下方法。使用从uchar到CV_32SC1的convertTo函数
imgCanny.convertTo(imgCanny32, CV_32SC1);
这只是给我一个空白imageCanny32。
下面的方法产生相同的结果。
imgCanny32 = Matrix(imgCanny.size(), CV_32SC1);
for (int i = 0;i < imgCanny.size().height;i++)
for (int j = 0;j < imgCanny.size().width;j++)
imgCanny32.at<int>(i,j) = imgCanny.at<uchar>(i,j);
我没有其他办法了。
最佳答案
正如您描述的那样,您从一个8位单通道图像开始。这意味着每个像素由一个无符号字节表示,因此可以具有介于0和255之间(含0和255)的值。
接下来,使用cv::Mat::convertTo
和alpha
的默认值执行 beta
。这意味着,在新的Mat
中,每个像素都由一个带符号的32位整数表示,但是值将保持在0-255(含)范围内。
最后,您将此Mat
传递给 cv::imshow
函数。请注意文档:
由于输入图像包含的最大像素值为255,并且像素除以256,因此该功能显示的图像将显示为全黑。
就是说,尽管我更喜欢convertTo
,但您显示的两种转换方法都是正确的,因为它将进行优化。如果要显示CV_32SC1
图像,也许应该为转换应用适当的缩放因子(alpha = 256
)。