我有两个使用指针传递图像的函数
功能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);
但结果相同。
如果能帮助我正确显示图像,我将不胜感激。也可以帮助我了解发生了什么。为什么opencv无法识别自己的交错图像?