转自: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 读取文件并转换灰度图像 并 边缘检测 代码. 有代码
读取图像:首先使用OpenCV-Python读取要转换的图像文件。2. 灰度化:将彩色图像转换为灰度图像,这是铅笔画效果的基础。3. 边缘检测:使用Canny边缘检测算法找到图像的边缘。4. 高斯滤波:对边缘图像进行高斯滤波...
C#中将byte数组转换为8bit灰度图像
图像文件通过自己开发的C#上位机接收,为188*120的灰度图像并保存为bmp文件 本项目通过OPENCV读取bmp文件为mat数据,并利用mat数据进行显示和存储 在imageDeal和imagePreDeal文件中,对由mat结构数据转换而来的...
OpenCvSharp与Picturebox实现图片打开、读取、灰度转换与保存
(1)以二进制方式读取一幅 bmp、jpeg 或 png 格式图像的数据,并判断其是否为灰度图像,如果不 是,则将其转换为灰度图像数据。 (2)提示输入一个灰度值区间数(在 1~256 之间的整数)。然后遍历整幅图像,根据...
注:Qt自带的QImage只能导入8位深的tiff灰度图,如果用qt的QImage导入16位深的灰度图,图像数据会被强制转换成argb格式的图像,数据就被更改了,所以我自己编写一个解析tiff文件的功能,我翻阅了很多博客,其中如下...
在这个例子中,我们首先读取了一张图像,然后将其转换为灰度图像。接着,我们使用 Otsu's 二值化方法对灰度图像进行阈值处理,将图像分成前景和背景两部分。最后,我们使用 Matplotlib 库显示原始图像和分割后的图像...
Sobel 算子边缘检测 OpenCV 实现 Sobel 算子边缘检测是图像处理中的一种常用技术,它可以检测图像中的边缘信息。 OpenCV 是一个开源的计算机视觉库,它提供...7. 图像转换(彩色图像转换为灰度图像) 8. 阈值处理技术
使用 Opencv 库的 cvtColor 函数将图像转换为灰度图像,例如: ``` Mat gray = new Mat(); Imgproc.cvtColor(image, gray, Imgproc.COLOR_BGR2GRAY); ``` 4. 应用边缘检测算法 使用 Opencv 库的 Canny 函数应用 ...
OpenCV教程 OpenCV(开源计算机视觉库)是一个强大的计算机视觉库,广泛用于图像处理和计算机视觉任务。...例如,要转换图像为灰度图,可以使用以下代码: python # 转换为灰度图 gray_image = cv2.cvtColor(image,
# 将图像转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 使用Canny边缘检测算法检测图像边缘 edges = cv2.Canny(gray, 100, 200) # 显示原始图像和边缘检测结果 cv2.imshow('Original 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.
使用`imread`函数来读取图像文件。 3. 显示图像: 使用`imshow`函数在窗口中显示图像。 4. 保存图像: 使用`imwrite`函数将处理后的图像保存到文件。 5. 图像转换: 使用`cvtColor`函数进行颜色空间转换,例如从...
2.将图像转变成灰度图像,因为OpenCV人脸检测器需要灰度图像,加载OpenCV人脸识别器,提取面部区域 3.读取训练文件夹中的图片名称,将每一个类型以01代表并且返回人脸坐标和人脸类型标签,如果图片的名称以happy开头...
opencv读取图像,再转换成三维点云,基于灰度的部分计算各点的颜色,用openscenegraph渲染成三维点云。
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) 绘制...
接下来,程序将jpg图像转换为灰度图像,并使用人脸检测器检测图像中的人脸,返回人脸的位置信息。如果检测到人脸,则遍历每个人脸,用矩形框出人脸,并计算人脸的一些特征参数。然后根据人脸的位置信息,将png图像...