繁体   English   中英

如何在OpenCV中使用16位灰度?

[英]How to work with 16 bit grayscale in OpenCV?

我找不到这些问题的答案:

  1. 我可以使用OpenCV显示16位灰度图片吗? 我尝试了imshow()但是在OpenCV创建的窗口上没有出现任何内容。

  2. 如何将16位灰度图像转换为B5G6R5图像? 我应该用什么参数创建cv::Mat来存储这个结构? 我试过cv::cvtColor(m_cvTmp, tmp, CV_GRAY2BGR565)但是这个函数一直在崩溃。 关于杂项图像转换文档没有说明答案。

PS:我要处理的图像已经在内存中了。

根据imshow的文档,它会自动将16位灰度缩放到8位,以便在屏幕上显示。 我用以下程序测试了这个:

#include <iostream>

#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace std;

int main(int argc, char *argv[]) {
    cv::Mat image;
    image = cv::imread("pic2.jpg");

    if (!image.data) {
        std::cout << "Image file not found\n";
        return 1;
    }

    cv::cvtColor(image, image, CV_BGR2GRAY);
    cv::Mat pic16bit;
    image.convertTo(pic16bit, CV_16U, 255); //convert to 16-bit by multiplying all values by 255

    // create image window named "asdfasdf"
    cv::namedWindow("asdfasdf");
    // show the image on window
    cv::imshow("asdfasdf", pic16bit);
    // wait for key
    cv::waitKey(0);

    return 0;
}

它按预期显示灰度图像。 所以如果你只是得到一个空白窗口,我的猜测是你从其他库到cv :: Mat的转换不能正常工作。 例如,当我第一次尝试从8位转换为16位时,我得到了全黑图像,因为我忘了将所有8位值乘以255。

作为调试的第一步,我会尝试在16位灰度cv :: Mat中显示部分或全部值。

此外,作为一般规则,如果您的问题中只有一个问题,Stack Overflow最有效。 当有多个问题时,您将获得多个有效答案,但您只能接受其中一个。

1)您必须查看此文档

你的代码就像:

Mat imageGrey = imread("<image_name>", CV_LOAD_IMAGE_GRAYSCALE);

2)

Mat imageGrey = imread("<image_name>", CV_LOAD_IMAGE_GRAYSCALE);
Mat imageBGR;
cvtColor(imageGrey, imageBGR, CV_GRAY2BGR565);

它有效吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM