[英]How to work with 16 bit grayscale in OpenCV?
根據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.