cv :: imshow将无法识别包裹在cv :: Mat中的交错指针

时间:2018-08-21 05:19:51

标签: c++ opencv pointers mat imshow

我有两个使用指针传递图像的函数

功能1:从文件中读取灰色图像,然后进行图像处理。将处理后的图像转换为彩色(3通道)。将其包装在指针中。

功能2:将图像指针作为输入。将其包裹在简历垫中并显示出来。做其他事情。

funct 1:
cv::Mat imIn = cv::Mat(height, width,CV_16UC1);
cv::Mat outImage;

// read image
std::ifstream ifs{ imagesPathVec, std::ios::in | std::ios::binary };
if ( ifs.is_open() )
{
 ifs.read( reinterpret_cast<char *>( imIn.data ), imIn.total() * imIn.elemSize() );
 ifs.close();         
}
imIn.convertTo(outImage, CV_32F);

//... some image processing applied to outImage

outImage.convertTo(outImage, CV_8UC1);

//wrapping the pointer outStreamBuffer in a cv::Mat.
cv::Mat outStream(height, width, CV_8UC3, static_cast<uint8_t*>(*outStreamBuffer));

// Try two methods to convert  to color images. 
//Method 1.
std::vector<cv::Mat> images(3);
images.at(0) = outImage;
images.at(1) = outImage;
images.at(2) = outImage;
cv::merge(images, outStream);

//Method 2.
cv::cvtColor(outImage, outStream, CV_GRAY2RGB);


Function 2
//wrap the incomming pointer inStreamBuffer in a Mat
cv::Mat inImage = cv::Mat(height, width, CV_8UC3, static_cast<uint8_t*>(*inStreamBuffer), width*3);

cv::imshow("m_inImage ", inImage);
cv::waitKey(10);

因为它是带有3个通道的灰度图像。我尝试通过在调用cvtColor()

之前调用cv::imshow()将其转换为颜色
 cv::cvtColor(inImage, inImage,CV_RGB2BGR);

但结果相同。

显示的图像是 enter image description here

如果能帮助我正确显示图像,我将不胜感激。也可以帮助我了解发生了什么。为什么opencv无法识别自己的交错图像?

0 个答案:

没有答案