opencv2.2 和 2.3 在MFC中显示图像
来源:互联网 发布:淘宝返利机器人在哪买 编辑:程序博客网 时间:2024/06/01 16:14
int showImage(Mat *workImg, CDC *pDC,int flag){ //======建立位图信息=========== int width, height, depth,channel; width = workImg->cols;; height = workImg->rows; depth = workImg->depth(); channel = workImg->channels(); int bits,colors,i; bits = (8<<(depth/2)) * channel; if (bits>8) colors=0; else colors=1<<bits; if (bits == 24) { bits = 32; } //位图的头 BITMAPINFOHEADER BIH={40, 0, 0, 1, 8, BI_RGB , 0, 0, 0, 0, 0}; //BIH.biSize = 40; BIH.biWidth = width; BIH.biHeight = height; //BIH.biPlanes = 1; BIH.biBitCount = bits;//表示颜色用到的位数 //BIH.biCompression = BI_RGB; //BIH.biSizeImage=0;//图像数据站的字节数,Specifies the size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps. //BIH.biXPelsPerMeter = 0; //BIH.biYPelsPerMeter = 0; //BIH.biClrUsed = 0; //BIH.biClrImportant = 0; // 建立位图信息 LPBITMAPINFO lpBmi; lpBmi=(LPBITMAPINFO) malloc(40+4*colors); memcpy(lpBmi,&BIH,40); // 复制位图信息头 if (bits==8) { // 256 色位图 if (flag==1) { // 设置灰阶调色板 for (i=0;i<256;i++) { VgaColorTab[i].rgbRed=VgaColorTab[i].rgbGreen= VgaColorTab[i].rgbBlue=(BYTE) i; } memcpy(lpBmi->bmiColors,VgaColorTab,1024); } else if (flag==2) { // 设置默认调色板 memcpy(lpBmi->bmiColors,VgaDefPal,1024); } else if (flag==3) { // 设置自定义调色板 memcpy(lpBmi->bmiColors,VgaColorTab,1024); } } //======颠倒数据 //======Mat 中从上往下存,而bitmap中从下往上存。 都是从左往右,并且bitmap每一个点多占一个保留字节,默认255 unsigned char *m_pDibBits;//存储图像中的数据,从下向上,从左向右 //x行 * Y列 int x,y; unsigned char * bmpdata; unsigned char * imgData = workImg->data; if (bits == 8) { m_pDibBits = new unsigned char[width * height]; //把imgData中的第一行复制到 m_pDibBits 的最后一行,依次颠倒 for (x=0; x<height; x++ ) { bmpdata = m_pDibBits + (height-1-x)*width; memcpy(bmpdata,imgData,width); imgData = imgData + width; } } else if (bits == 32) { m_pDibBits = new unsigned char[ width * height*4 ]; //把imgData中的第一行复制到 m_pDibBits 的最后一行,依次颠倒 for (x=0; x<height; x++ ) { bmpdata = m_pDibBits + (height-1-x)*width*4; for (y = 0; y<width; y++) { memcpy(bmpdata,imgData,3); bmpdata[3] = 255; bmpdata = bmpdata+4; imgData = imgData+3; } } } //======显示图像 SetStretchBltMode(pDC->m_hDC,HALFTONE);//防止自适应窗口图像显示失真 StretchDIBits(pDC->m_hDC,0, 0, width, height, 0, 0, width, height, m_pDibBits, lpBmi, BI_RGB, SRCCOPY); delete []m_pDibBits; //TRACE("显示之后大小:%d",*img); /*namedWindow("ss",WINDOW_AUTOSIZE); imshow("ss",*img);*/ return TRUE; }
只需要在onDraw()函数中调用上述函数即可
例如:
Mat img;
img = imread("lena.jpg");
if( !img.data)
{
return;
}
showImage(&img, pDC);
- opencv2.2 和 2.3 在MFC中显示图像
- 在MFC中使用opencv2以上版本对图像进行显示
- opencv2在MFC对话框控件中显示图片播放视频
- opencv2.3结合MFC显示图像
- 在MFC中显示IplImage图像
- 使用OpenCV在MFC中显示图像
- 在MFC中显示opencv图像
- 在MFC中利用HALCON读取图像,并显示在主窗口和picture空间中
- 在MFC中调用GDI+显示图像Mat图像
- opencv2.2 MFC picture控件中显示图片
- opencv学习——在MFC中读取和显示图像
- SDL和FFmpeg解码图像在MFC的规定的窗口中显示
- 在MFC中显示OpenCV的Mat格式图像和打开摄像头
- MFC中在picture control中显示图像的方法
- 在MFC程序中显示JPG/GIF图像
- 在MFC程序中显示JPG/GIF图像
- 在MFC程序中显示JPG/GIF图像
- 在MFC程序中显示JPG/GIF图像
- Tomcat Manager 用户名和密码配置
- sys,system,scott,dba,sysdba,sysopt使用和区别
- 关于zpl指令一个注意点
- Java加密技术(二)DES
- 把 ad 里面的用户加入到moss 网站 ,然后分配权限
- opencv2.2 和 2.3 在MFC中显示图像
- Oracle备份(四)------RMAN
- android 流量统计
- 概念数据模型(CDM)、逻辑数据模型(LDM)、物理数据模型(PDM)
- XML文档中预定义好的实体
- php umask
- VC 之 cout 与 wcout 区别及 wchar_t、CharSet、CodePage 等相关概念解析
- URL直接传递特殊符号编码
- Java加密技术(三) PBE