`
jgsj
  • 浏览: 972570 次
文章分类
社区版块
存档分类
最新评论

OpenCV 读取文件并转换灰度图像

 
阅读更多

转自: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 读取文件并转换灰度图像 并 边缘检测 代码. 有代码

    opencv-python实现的图像转换为铅笔画工具源代码

    读取图像:首先使用OpenCV-Python读取要转换的图像文件。2. 灰度化:将彩色图像转换为灰度图像,这是铅笔画效果的基础。3. 边缘检测:使用Canny边缘检测算法找到图像的边缘。4. 高斯滤波:对边缘图像进行高斯滤波...

    C#中将byte数组转换为8bit灰度图像

    C#中将byte数组转换为8bit灰度图像

    基于OPENCV和CVui的智能车图像处理

    图像文件通过自己开发的C#上位机接收,为188*120的灰度图像并保存为bmp文件 本项目通过OPENCV读取bmp文件为mat数据,并利用mat数据进行显示和存储 在imageDeal和imagePreDeal文件中,对由mat结构数据转换而来的...

    OpenCvSharp与Picturebox实现图片打开、读取、灰度转换与保存

    OpenCvSharp与Picturebox实现图片打开、读取、灰度转换与保存

    C++实验:灰度直方图含实验报告

    (1)以二进制方式读取一幅 bmp、jpeg 或 png 格式图像的数据,并判断其是否为灰度图像,如果不 是,则将其转换为灰度图像数据。 (2)提示输入一个灰度值区间数(在 1~256 之间的整数)。然后遍历整幅图像,根据...

    qt编写的解析16位深tiff灰度图的程序

    注:Qt自带的QImage只能导入8位深的tiff灰度图,如果用qt的QImage导入16位深的灰度图,图像数据会被强制转换成argb格式的图像,数据就被更改了,所以我自己编写一个解析tiff文件的功能,我翻阅了很多博客,其中如下...

    一个使用 OpenCV 库进行图像分割的简单示例

    在这个例子中,我们首先读取了一张图像,然后将其转换为灰度图像。接着,我们使用 Otsu's 二值化方法对灰度图像进行阈值处理,将图像分成前景和背景两部分。最后,我们使用 Matplotlib 库显示原始图像和分割后的图像...

    sober算子边缘检测opencv实现

    Sobel 算子边缘检测 OpenCV 实现 Sobel 算子边缘检测是图像处理中的一种常用技术,它可以检测图像中的边缘信息。 OpenCV 是一个开源的计算机视觉库,它提供...7. 图像转换(彩色图像转换为灰度图像) 8. 阈值处理技术

    Android studio opencv环境配置及边缘检测实例

    使用 Opencv 库的 cvtColor 函数将图像转换为灰度图像,例如: ``` Mat gray = new Mat(); Imgproc.cvtColor(image, gray, Imgproc.COLOR_BGR2GRAY); ``` 4. 应用边缘检测算法 使用 Opencv 库的 Canny 函数应用 ...

    OpenCV教程资源分享

    OpenCV教程 OpenCV(开源计算机视觉库)是一个强大的计算机视觉库,广泛用于图像处理和计算机视觉任务。...例如,要转换图像为灰度图,可以使用以下代码: python # 转换为灰度图 gray_image = cv2.cvtColor(image,

    OpenCV图像处理-应用Canny边缘检测算法来检测图像中的边缘

    # 将图像转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 使用Canny边缘检测算法检测图像边缘 edges = cv2.Canny(gray, 100, 200) # 显示原始图像和边缘检测结果 cv2.imshow('Original Image', ...

    python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结

    方法一:在使用OpenCV读取图片的同时将图片转换为灰度图: img = cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE) print(cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE)结果如下:) print('大小:{}'.forma

    python批量转换yuv图像到jpg图像

    python批量转换yuv图像到jpg图像 循环遍历指定的目录,查找后缀为.yuv的文件。根据文件名解析出图像宽高。...利用numpy和opencv转换为jpg图像并保存。 注意:本脚本读取的是灰度图,设置uv分量为固定值0x80.

    深度学习OpenCV基础操作视频讲解

    使用`imread`函数来读取图像文件。 3. 显示图像: 使用`imshow`函数在窗口中显示图像。 4. 保存图像: 使用`imwrite`函数将处理后的图像保存到文件。 5. 图像转换: 使用`cvtColor`函数进行颜色空间转换,例如从...

    基于python+opencvLBPH实现人脸表情识别系统完整源码+GUI界面.zip

    2.将图像转变成灰度图像,因为OpenCV人脸检测器需要灰度图像,加载OpenCV人脸识别器,提取面部区域 3.读取训练文件夹中的图片名称,将每一个类型以01代表并且返回人脸坐标和人脸类型标签,如果图片的名称以happy开头...

    二维图像的三维可视化

    opencv读取图像,再转换成三维点云,基于灰度的部分计算各点的颜色,用openscenegraph渲染成三维点云。

    利用opencvLBPH+UI界面,实现传统的人脸表情检测项目源码

    2.将图像转变成灰度图像,因为OpenCV人脸检测器需要灰度图像,加载OpenCV人脸识别器,提取面部区域 3.读取训练文件夹中的图片名称,将每一个类型以01代表并且返回人脸坐标和人脸类型标签,如果图片的名称以happy开头...

    opencv学习资料

    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) 绘制...

    Python+OpenCV表情识别系统

    接下来,程序将jpg图像转换为灰度图像,并使用人脸检测器检测图像中的人脸,返回人脸的位置信息。如果检测到人脸,则遍历每个人脸,用矩形框出人脸,并计算人脸的一些特征参数。然后根据人脸的位置信息,将png图像...

Global site tag (gtag.js) - Google Analytics