我尝试了以下方法。使用从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::convertToalpha的默认值执行 beta 。这意味着,在新的Mat中,每个像素都由一个带符号的32位整数表示,但是值将保持在0-255(含)范围内。

最后,您将此Mat传递给 cv::imshow 函数。请注意文档:



由于输入图像包含的最大像素值为255,并且像素除以256,因此该功能显示的图像将显示为全黑。

就是说,尽管我更喜欢convertTo,但您显示的两种转换方法都是正确的,因为它将进行优化。如果要显示CV_32SC1图像,也许应该为转换应用适当的缩放因子(alpha = 256)。

10-07 19:26