用OpenCV显示一幅图像到指定的窗体
来源:互联网 发布:freebsd centos 编辑:程序博客网 时间:2024/05/13 06:32
找了好久,没找到相应函数,于是参照cv::imshow的源代码,搞出来一份。
(OpenCV不简洁明了,学习的成本大于2天我就觉得太不值得了,下周准备试试CxImage)
#include "highgui.h"
#ifdef _DEBUG
#pragma comment( lib, "opencv_core220d.lib" )
#pragma comment( lib, "opencv_highgui220d.lib" )
#else
#pragma comment( lib, "opencv_core220.lib" )
#pragma comment( lib, "opencv_highgui220.lib" )
#endif
// 此代码是从OpenCV-2.2.0 中一点点扣出来的
bool MyShowImage( const cv::Mat& img, HDC hdc, const RECT& rect )
{
CvMat _img = img;
const CvArr* arr = &_img;
CvMat stub;
CvMat* image = cvGetMat( arr, &stub );
// 构造BITMAPINFO头
SIZE size = { image->width, image->height };
int channels = 3;
BITMAPINFO binfo;
memset( &binfo, 0, sizeof(binfo));
BITMAPINFOHEADER& bmih = binfo.bmiHeader;
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biWidth = size.cx;
bmih.biHeight = abs(size.cy);
bmih.biPlanes = 1;
bmih.biBitCount = (unsigned short)(channels*8);
bmih.biCompression = BI_RGB;
void* dst_ptr = 0;
HBITMAP hb = CreateDIBSection( hdc, &binfo, DIB_RGB_COLORS, &dst_ptr, 0, 0 );
HDC windowdc = ::CreateCompatibleDC( hdc );
SelectObject( windowdc, hb );
CvMat dst;
cvInitMatHeader( &dst, size.cy, size.cx, CV_8UC3, dst_ptr, (size.cx*channels + 3)&-4 );
int origin = ((IplImage*)arr)->origin;
cvConvertImage( image, &dst, origin==0 ? CV_CVTIMG_FLIP : 0 );
// 显示
SetStretchBltMode( hdc, COLORONCOLOR );
//BitBlt( hdc, 0, 0, size.cx, size.cy, windowdc, 0, 0, SRCCOPY );
StretchBlt( hdc, 0, 0, rect.right-rect.left, rect.bottom-rect.top, windowdc, 0, 0, size.cx, size.cy, SRCCOPY );
return 0;
}
int main()
{
const char* imagename = "1.tif";
cv::Mat img = cv::imread( imagename );
if( img.empty() || !img.data )
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
//cv::namedWindow("image", CV_WINDOW_AUTOSIZE);
//cv::imshow("image", img);
//cv::waitKey();
// 随便弄个窗体,然后显示上去
HWND hwnd = ::GetConsoleWindow();
RECT rect;
GetWindowRect( hwnd, &rect );
MyShowImage( img, ::GetWindowDC(hwnd), rect );
return 0;
}
# http://www.antigrain.com/2011-02-23 19:47wetwoo
http://www.antigrain.com/
- 用OpenCV显示一幅图像到指定的窗体
- 用OpenCV显示一幅图像到指定的窗体
- opencv Mat显示到指定窗体 Direct2D实现
- opencv Mat显示到指定窗体 CImage实现
- opencv把一个图像的一小块区域拷贝到另一个图像的指定区域
- opencv-把一个图像的一小块区域拷贝到另一个图像的指定区域
- OpenCV读入的图像如何显示在窗体上
- 【拜小白opencv】15-利用ROI将一幅图像叠加到另一幅图像的指定位置
- OpenCV(一)图像的打开与显示
- OpenCV入门----显示一幅图像
- 利用OpenCV显示一幅图像
- 在Windows窗体中显示OpenCV图像
- Java(opencv)窗体中显示图像
- OpenCV显示磁盘上的图像:cvLoadImage,cvShowImage加载并显示一幅图像(图像位于本地磁盘)
- 学习opencv(一)--图像显示
- opencv 在指定位置显示图像
- opencv:图像的显示
- opencv:将图像copy到指定位置
- CMD命令大全
- 读取NTFS的USN(快速检索文件)
- 内联汇编读取cr0, cr4等值以及fxsave, fxrstor指令的使用
- 读取NTFS的USN(获取文件的历史操作记录,即使这个文件已被删除)
- HDU-2222 Keywords Search
- 用OpenCV显示一幅图像到指定的窗体
- shell 脚本中传递参数3种方法的比较
- 三十而立
- (C/C++面试题)没看过不知道自己有多差!!!!原本以为自己C还可以,也做过几个项目了,看了这些面试问题,我傻住了!!!!
- phpbb顶部index.php提示86行错误解决方法
- android xml解析之PULL解析
- make----关于makefile的学习与积累--01
- 关于ajax请求在IE6,9下的缓存问题
- 详细讲解SATA硬盘安装过程