码迷,mamicode.com
首页 > Windows程序 > 详细

将Opencv,Mat类型图片贴图到windows显示设备中

时间:2014-12-19 00:42:40      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:blog   http   ar   io   color   使用   on   数据   2014   

Opencv对图像的显示,有自带的imshow函数完成。但是,如果需要在windows程序中显示图像的时候,就有点小麻烦了。

现介绍一种方法,是在《Learning openCV Second Edition》中介绍的。

代码如下所示:


void CShowPicToDlgDlg::OnBnClickedOk()
{
	RGBTRIPLE* m_bitmapBits;
	//读取图片	
	Mat cv_pic_src = imread("11.jpg", CV_LOAD_IMAGE_COLOR);

	//申请图片使用的内存
	m_bitmapBits = new RGBTRIPLE[cv_pic_src.cols * cv_pic_src.rows];

	//声明一个mat
	Mat cv_header_to_dlg_image(
			Size( cv_pic_src.cols, cv_pic_src.rows ),
			CV_8UC3,
			m_bitmapBits
		);

	//图像格式转换
	cvtColor( cv_pic_src, cv_header_to_dlg_image, CV_BGR2RGB );

	//获取绘制区域和设备
	CClientDC dc(this);
	CRect rect;
	GetClientRect(&rect);

	
	//声明BITMAPINFO头,并将图像贴到设备上。
	BITMAPINFO bmi = {0};
	bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader);
	bmi.bmiHeader.biCompression = BI_RGB;
	bmi.bmiHeader.biWidth = cv_pic_src.cols;
	bmi.bmiHeader.biHeight = cv_pic_src.rows * -1;	//注意这里,因为BITMAPINFO中数据是反的,因此需要乘 -1 

	bmi.bmiHeader.biPlanes = 1;
	bmi.bmiHeader.biBitCount = 24;

	::StretchDIBits( dc.GetSafeHdc(), 0, 0, rect.Width(), rect.Height(), 
					0, 0, bmi.bmiHeader.biWidth, abs(bmi.bmiHeader.biHeight),
					m_bitmapBits,
					&bmi,
					DIB_RGB_COLORS,
					SRCCOPY
					);	

	
	namedWindow("test");
	imshow("test", cv_header_to_dlg_image);
	waitKey(0);
	
}


显示效果如下:

bubuko.com,布布扣

通过imshow显示效果如下:

bubuko.com,布布扣


但是实际的图片是这样的:

bubuko.com,布布扣


从这里看,CV_BGR2RGB 转换好像存在颜色上的不确认。到底是什么原因,需要进一步研究。

将Opencv,Mat类型图片贴图到windows显示设备中

标签:blog   http   ar   io   color   使用   on   数据   2014   

原文地址:http://blog.csdn.net/morbi/article/details/42014787

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!