gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:16 26 4
gpt4 key购买 nike

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

  1. 我可以用OpenCV显示16位灰度图吗?我尝试了 imshow(),但 OpenCV 创建的窗口上没有任何显示。

  2. 如何将 16 位灰度图片转换为 B5G6R5 图片?为了存储这个结构,我应该用什么参数创建 cv::Mat?我试过 cv::cvtColor(m_cvTmp, tmp, CV_GRAY2BGR565) 但这个函数一直在崩溃。 documentation on miscellaneous image transformations不告诉答案。

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 的效果最好。当有多个问题时,您会得到不止一个有效答案,但您只能接受其中一个。

关于c++ - 如何在 OpenCV 中使用 16 位灰度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13822748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com