簡體   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