指针形式的图像的保存与转换
来源:互联网 发布:化为简化阶梯型矩阵 编辑:程序博客网 时间:2024/04/19 19:45
视觉开发时用到的相机原始数据大部分都是以指针的形式存在,在使用之往往需要确保图像是否正确,通过下面的函数可以直接保存图像。
实现如:(MFC下)
bool SaveGrayImage(LPCTSTR fileName,BYTE* pImageData,int nWidth,int nHeight);//声明
SaveGrayImage(_T("1.bmp"),pImage,Width,Height);
bool SaveGrayImage(LPCTSTR fileName,BYTE* pImageData,int nWidth,int nHeight){#ifdef MY_DEBUGHANDLE fh; DWORD dwWritten=0; BYTE* pDest = NULL;if(fileName == NULL || nWidth < 1 || nHeight < 1)return FALSE;fh = CreateFile(fileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); if(fh == INVALID_HANDLE_VALUE) return FALSE; BITMAPFILEHEADER BFH;memset(&BFH,0,sizeof(BITMAPFILEHEADER));//写入位图文件头BFH.bfType = 0x4d42;BFH.bfSize = 0;BFH.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);BFH.bfReserved1 = 0;BFH.bfReserved2 = 0;WriteFile(fh,(char*)&BFH,sizeof(BITMAPFILEHEADER), &dwWritten, NULL);//写入位图信息头BITMAPINFO *pBInfo;pBInfo = (BITMAPINFO*) new BYTE[sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)];pBInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);pBInfo->bmiHeader.biWidth = nWidth;pBInfo->bmiHeader.biHeight = -nHeight;pBInfo->bmiHeader.biPlanes = 1;pBInfo->bmiHeader.biBitCount = 8;pBInfo->bmiHeader.biCompression = BI_RGB;pBInfo->bmiHeader.biSizeImage = 0;pBInfo->bmiHeader.biXPelsPerMeter = 0;pBInfo->bmiHeader.biYPelsPerMeter = 0;pBInfo->bmiHeader.biClrUsed = 0;pBInfo->bmiHeader.biClrImportant = 0;//写入位图颜色表for (int i=0;i<256;++i){pBInfo->bmiColors[i].rgbBlue = i;pBInfo->bmiColors[i].rgbGreen = i;pBInfo->bmiColors[i].rgbRed = i;pBInfo->bmiColors[i].rgbReserved = 0;}WriteFile(fh,pBInfo,sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD),&dwWritten, NULL); delete[] pBInfo; // 写入位图文件其余内容 if(nWidth&0x3){int width = (nWidth+3)/4*4;int k=0;pDest = new BYTE[width*nHeight];memset(pDest,255,width*nHeight);for(int i=0;i<nHeight;i++){for(int j=0;j<nWidth;j++){pDest[i*width+j] = pImageData[k++];//pImageData[i*nWidth+j];}}WriteFile(fh, pDest, width*nHeight, &dwWritten, NULL); delete[] pDest;}else//32位对齐{WriteFile(fh, pImageData, nWidth*nHeight, &dwWritten, NULL); } CloseHandle(fh); #endifreturn TRUE;}
另外,也可以通过OpenCV的Mat进行构造,转换为我们熟悉的Mat类型图像。如:
Mat a;a=Mat(Height,Width,CV_8UC1,p_Image,Width).clone;//p_Imag为指针图像数据
阅读全文
0 0
- 指针形式的图像的保存与转换
- 【图像处理】C++将读取图像并将图像转换为矩阵的形式
- BMP图像的读取与保存
- 图像的读取,显示与保存
- VTK中迭代器的使用,并将指针中的图像保存
- 【C++的探索路11】继承与派生之拓展篇--多形式派生以及派生类指针转换
- 对象与指针的转换
- 指针类型与指针类型的转换
- 【python图像处理】图像的读取、显示与保存
- 截取手机屏幕中某个View的图像,并以图片形式保存到本地相册
- C指针与数组两种形式的区别
- C常见问题之字符串的数组形式与指针形式的区别
- C#图像的保存
- matlab 图像的保存
- 函数指针的赋值形式
- 指针内部的存储形式
- VC位图文件的保存与转换
- IplImage图像与BYTE图像之间的转换与利用
- NOIP OIer光荣退役记
- indexOf方法和ES6的includes方法
- 269. Alien Dictionary
- IDEA spring的xml配置文件加载不到properties属性问题
- leetcode---palindrome-partitioning---dp, dfs
- 指针形式的图像的保存与转换
- IDEA(jetbrain通用)优雅级使用教程
- Tomcat7+Redis存储Session
- Redis
- 5.9
- Stanford Online-统计学习-ISLR-Ch3-Linear Regression
- MyBatis的collection只能查询一条记录
- Spring中 abstract="true"
- 深入理解Spring MVC 思想