【问题标题】:Convert type of Matrix in OpenCV在 OpenCV 中转换矩阵的类型
【发布时间】:2012-06-21 00:15:16
【问题描述】:

我有以下代码使用 OpenCV API 中的 cv::Mat.convertTo() 函数转换矩阵的“类型”。

但是当我使用 imshow() 显示它时,图像完全不同。

转换后的图像完全是灰色的。

但是,这些图像中的值(cv::Mat)是相同的。

我想我在这里遗漏了一些非常微不足道的东西。

Mat x = imread("/home/jason/Desktop/1.png",0);
Mat y = Mat(x.rows,x.cols,CV_16S,Scalar(0));

x.convertTo(y,CV_16SC1, 1,0);

imshow("x",x);
imshow("y",y);
waitKey(0);

cout<<x.type()<<endl;
cout<<y.type()<<endl;

//verifying the values in the image.

cout<<"rows 10"<<x.row(10)<<endl;
cout<<"rows 10"<<y.row(10)<<endl;

【问题讨论】:

    标签: c++ image-processing opencv


    【解决方案1】:

    当您将 CV_16S 图像传递给 imshow(或其 C 等效项)时,像素值会在可视化之前通过公式 vdisplayed = 128 + v 隐式重新计算图片/256

    因此,您可能需要在调用 imshow 之前将图像乘以某个常数(256?)或将其转换为 CV_8U

    【讨论】:

    • 这很有趣。我刚刚检查了文档。我认为这是非常微不足道的关注。你知道为什么会这样吗?
    • 有几个原因:1)没有那么多设备能够显示超过8位每通道。 2) 只有 BGR888 格式具有足够的便携性,可以显示在 OpenCV 旨在工作的各种系统上。 3) OpenCV 中的 GUI 功能是为算法开发和调试而设计的,而不是为构建实际应用程序而设计的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 2012-09-23
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多