c++ - 如何转换简历类型 :Mat

标签 c++ opencv

我尝试了以下方法。使用 convertTo 函数从 uchar 转换为 CV_32SC1

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 位单 channel 图像开始。这意味着每个像素都由一个无符号字节表示,因此可以具有 0 到 255 之间的值(含 0 和 255)。

接下来,您执行 cv::Mat::convertTo ,使用 alphabeta 的默认值。这意味着在新的 Mat 中,每个像素都由带符号的 32 位整数表示,但值将保持在 0-255 的范围内。

最后,您将此 Mat 传递给 cv::imshow功能。注意文档:

If the image is 16-bit unsigned or 32-bit integer, the pixels are divided by 256. That is, the value range [0,255*256] is mapped to [0,255].

由于输入图像包含的最大像素值为 255,像素除以 256,因此函数显示的图像将呈现全黑。


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

关于c++ - 如何转换简历类型 :Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44100532/

相关文章:

c++ - 调试函数包装器

C++11 std::function 比虚拟调用慢?

C++ vector 问题

c++ - NaN 在 float 和 double 之间的类型转换

python - 在黑白图片中的特定颜色周围添加边框

c++ - 具有嵌套类的模板类

c++ - OpenCV - Brox 光流 - opencv_core244d!cv::GlBuffer::unbind 异常

opencv - 在给定内在、外在和 Y=0 约束的情况下估计 2D 像素的深度

opencv - 使用Open CV更改照片中的Powerpoint幻灯片

python - 血管抽出来了,怎么提亮呢?