转自:http://blog.csdn.net/zhenxiaohui/archive/2009/07/31/4396237.aspx
1.在CRMBCheckDoc.h中添加变量
public:
IplImage *TheImage; //定义图像指针,类型IplImage
IplImage *GrayImage;
2.CRMBCheckDoc类初始化和析构函数
CRMBCheckDoc::CRMBCheckDoc()
{
// TODO: add one-time construction code here
TheImage = NULL; //把图像指针赋值为NULL
GrayImage = NULL;//把灰度图像指针赋值为NULL
}
CRMBCheckDoc::~CRMBCheckDoc()
{
if (TheImage != NULL)
{
cvReleaseImage(&TheImage);
}
if (GrayImage != NULL)
{
cvReleaseImage(&GrayImage);
}
}
3.重载函数OnOpenDocument,并添加代码
BOOL CRMBCheckDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
//重新打开文件时,把已有的数据清空
if (TheImage != NULL)
{
cvReleaseImage(&TheImage);
}
if (GrayImage != NULL)
{
cvReleaseImage(&GrayImage);
}
//打开图像文件把图像相关的数付给TheImage指针
TheImage = cvLoadImage(lpszPathName,1);
//判断图像文件打开是否成功,如果没有成功提示开打失败
if (TheImage == NULL)
{
MessageBox(NULL,"打开文件失败!","操作失败",MB_OK);
}
return TRUE;
}
4在菜单中添加彩色图像转换为灰度图像菜单,并生成触发事件。代码如下:
void CRMBCheckDoc::OnSdGrbtogray()
{
//判断图像文件是否已经打开
if(TheImage == NULL)
{
MessageBox(NULL,"请先打开文件!","操作失败",MB_OK);
return ;
}
//创建保存灰度图像的图像指针
GrayImage = cvCreateImage(cvSize(TheImage->width,TheImage->height),IPL_DEPTH_8U,1);
//把彩色图像转换为灰度图像
cvCvtColor(TheImage,GrayImage,CV_RGB2GRAY);
//更新视图
UpdateAllViews(NULL);
}
5为保存添加触发事件,并添加代码:
void CRMBCheckDoc::OnFileSave()
{
if (GrayImage != NULL)
{
cvSaveImage("reason.bmp",GrayImage);
}
else
{
MessageBox(NULL,"还没有对图像进行处理无法保持","提示",MB_OK);
}
}
6在类CRMBCheckView中添加OnDraw函数代码:
CRMBCheckDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
HDC hDC = pDC->GetSafeHdc();
// TODO: add draw code for native data here
//显示打开的图像文件
if (pDoc->TheImage != NULL)
{
//创建显示图像文件的区域
CRect rect(0,0,pDoc->TheImage->width,pDoc->TheImage->height);
CImage img; //
img.CopyOf(pDoc->TheImage);//把Doc文件中的IplImage数据拷贝到CImage
img.DrawToHDC(hDC,&rect);//进行图像显示
}
//显示转化后的灰度图像
if (pDoc->GrayImage != NULL)
{
COLORREF *data;
CBitmap bm;
CDC *MemDC = new CDC;
int width = pDoc->GrayImage->width, height = pDoc->GrayImage->height;
pDC->SetBkMode(TRANSPARENT); //设置背景颜色为透明
int step = pDoc->GrayImage->widthStep / sizeof(uchar); //计算Doc中IplIamge存取的图像数据的步长
data = new COLORREF[width * height];//为data数据分配空间,大小为灰度图像的大小
//为data赋值
for (int i = 0;i != height;i++)
{
for (int j = 0;j != width;j++)
{
data[i * width + j] = RGB((pDoc->GrayImage->imageData[i * step + j]),(pDoc->GrayImage->imageData[i * step + j]),(pDoc->GrayImage->imageData[i * step + j]));
}
}
//create bitmap
bm.CreateBitmap(width,height,1,32,data);
//实现双缓冲,避免闪烁
MemDC->CreateCompatibleDC(pDC);
MemDC->SelectObject(&bm);
pDC->SetStretchBltMode(COLORONCOLOR);
pDC->StretchBlt(pDoc->TheImage->width + 10,0,width,height,MemDC,0,0,width,height,SRCCOPY);
//删除已经分配的内存空间
ReleaseDC(MemDC);
delete MemDC;
bm.DeleteObject();
delete[] data;
}
ReleaseDC(pDC);
分享到:
相关推荐
OpenCV 读取文件并转换灰度图像 并 边缘检测 代码. 有代码
OpenCvSharp与Picturebox实现图片打开、读取、灰度转换与保存
读取图像:首先使用OpenCV-Python读取要转换的图像文件。2. 灰度化:将彩色图像转换为灰度图像,这是铅笔画效果的基础。3. 边缘检测:使用Canny边缘检测算法找到图像的边缘。4. 高斯滤波:对边缘图像进行高斯滤波...
(1)以二进制方式读取一幅 bmp、jpeg 或 png 格式图像的数据,并判断其是否为灰度图像,如果不 是,则将其转换为灰度图像数据。 (2)提示输入一个灰度值区间数(在 1~256 之间的整数)。然后遍历整幅图像,根据...
注:Qt自带的QImage只能导入8位深的tiff灰度图,如果用qt的QImage导入16位深的灰度图,图像数据会被强制转换成argb格式的图像,数据就被更改了,所以我自己编写一个解析tiff文件的功能,我翻阅了很多博客,其中如下...
OpenCV教程 OpenCV(开源计算机视觉库)是一个强大的计算机视觉库,广泛用于图像处理和计算机视觉任务。...例如,要转换图像为灰度图,可以使用以下代码: python # 转换为灰度图 gray_image = cv2.cvtColor(image,
方法一:在使用OpenCV读取图片的同时将图片转换为灰度图: img = cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE) print(cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE)结果如下:) print('大小:{}'.forma
python批量转换yuv图像到jpg图像 循环遍历指定的目录,查找后缀为.yuv的文件。根据文件名解析出图像宽高。...利用numpy和opencv转换为jpg图像并保存。 注意:本脚本读取的是灰度图,设置uv分量为固定值0x80.
opencv读取图像,再转换成三维点云,基于灰度的部分计算各点的颜色,用openscenegraph渲染成三维点云。
2.将图像转变成灰度图像,因为OpenCV人脸检测器需要灰度图像,加载OpenCV人脸识别器,提取面部区域 3.读取训练文件夹中的图片名称,将每一个类型以01代表并且返回人脸坐标和人脸类型标签,如果图片的名称以happy开头...
2.将图像转变成灰度图像,因为OpenCV人脸检测器需要灰度图像,加载OpenCV人脸识别器,提取面部区域 3.读取训练文件夹中的图片名称,将每一个类型以01代表并且返回人脸坐标和人脸类型标签,如果图片的名称以happy开头...
4.4.2 (2) 彩色图像->灰度图像: 4.4.3 (3) 不同彩色空间之间的转换: 4.5 5、绘图指令 4.5.1 (1) 绘制矩形: 4.5.2 (2) 绘制圆形: 4.5.3 (3) 绘制线段: 4.5.4 (4) 绘制一组线段: 4.5.5 (5) 绘制...
第 3 章进阶篇——图像灰度变换技术. 75 3.1 阈值化处理. 76 3.1.1 OTSU 阈值化 76 3.1.2 固定阈值化 79 3.1.3 自适应阈值化.. 81 3.1.4 双阈值化. 83 3.1.5 半阈值化. 84 3.2 直方图处理. 85 3.2.1 灰度直方图 85 ...
4.4.2 (2) 彩色图像->灰度图像: 4.4.3 (3) 不同彩色空间之间的转换: 4.5 5、绘图指令 4.5.1 (1) 绘制矩形: 4.5.2 (2) 绘制圆形: 4.5.3 (3) 绘制线段: 4.5.4 (4) 绘制一组线段: 4.5.5 (5) 绘制...
本文介绍OpenCV基本函数库的一些调用 以下使用的cv_imgshow函数是自定义封装...cv2.IMREAD_UNCHANGED:用图片的原来格式打开,即以不改变图片的方式打开,图片是彩色就是彩色,图片是灰度图像就是灰度图像,可以直接写-
2. 除了读取与写入之外不能使用其他现成库函数,比如大名鼎鼎的opencv **2.1 基本思路: 去噪,边缘提取,车道检测** 实现了以下算法: 1. 彩色图像转灰度 2. 图像翻转,获得负片 3. 线性灰度转换 4. 对数灰度...
然后,程序读取了一个裂纹样本图像,将其转换为灰度图像。 接下来,程序对图像进行了一系列的图像处理操作。首先进行了平滑处理,使用了均值滤波器进行图像平滑。然后,应用了对数变换,将图像进行了对数变换,增强...
接下来,程序将jpg图像转换为灰度图像,并使用人脸检测器检测图像中的人脸,返回人脸的位置信息。如果检测到人脸,则遍历每个人脸,用矩形框出人脸,并计算人脸的一些特征参数。然后根据人脸的位置信息,将png图像...
code_001 | [图片读取与显示](python/code_001/opencv_001.py) | ✔️ code_002 | [图片灰度化](python/code_002/opencv_002.py) | ✔️ code_003 | [图像创建与赋值](python/code_003/opencv_003.py) | ✔️ code_...
◦ 转换为灰度图像,以便更好地进行抠图操作。 4. 抠图算法: • 使用OpenCV的阈值函数或其他方法,对图像进行二值化处理,以便更好地识别前景和背景。 ◦ 使用OpenCV的轮廓检测函数(例如findContours)来检测...