I can't find the answers to the these questions:
Can I use OpenCV to display 16-bit grayscale pictures? I tried imshow()
but nothing appeared on the windows created by OpenCV.
How can I convert a 16-bit grayscale picture to a B5G6R5 picture? What parameter should I create cv::Mat
with in order to store this structure? I tried cv::cvtColor(m_cvTmp, tmp, CV_GRAY2BGR565)
but this function kept crashing. The documentation on miscellaneous image transformations does not tell the answer.
PS: the image I want to process is already in the memory.
According to the documentation for imshow
, it will automatically scale a 16-bit grayscale to 8-bit in order to display it on the screen. I tested this with the following program:
#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;
}
It displayed the grayscale image as expected. So if you are just getting a blank window, my guess is that your conversion from the other library to cv::Mat is not working correctly. For example, when I first tried to convert from 8-bit to 16-bit I got an-all black image because I forgot to multiply all the 8-bit values by 255.
As a first step in debugging I would try displaying some or all of the values in your 16-bit grayscale cv::Mat.
Also, as a general rule Stack Overflow works best if you only have a single question in your question. When there are multiple questions you will wind up with more than one valid answer but you can only accept one of them.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With