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

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

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

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

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

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

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

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

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

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

    OpenCV教程资源分享

    OpenCV教程 OpenCV(开源计算机视觉库)是一个强大的计算机视觉库,广泛用于图像处理和计算机视觉任务。...例如,要转换图像为灰度图,可以使用以下代码: python # 转换为灰度图 gray_image = cv2.cvtColor(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读取图像,再转换成三维点云,基于灰度的部分计算各点的颜色,用openscenegraph渲染成三维点云。

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

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

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

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

    李立宗_OPENCV 编程案例详解.zip

    第 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 ...

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

    OpenCV–图片的读取、显示、保存、颜色转换、翻转、复制

    本文介绍OpenCV基本函数库的一些调用 以下使用的cv_imgshow函数是自定义封装...cv2.IMREAD_UNCHANGED:用图片的原来格式打开,即以不改变图片的方式打开,图片是彩色就是彩色,图片是灰度图像就是灰度图像,可以直接写-

    基于自实现opencv图像处理函数的静态车道线检测项目源码+数据集+使用说明(毕业设计).zip

    2. 除了读取与写入之外不能使用其他现成库函数,比如大名鼎鼎的opencv **2.1 基本思路: 去噪,边缘提取,车道检测** 实现了以下算法: 1. 彩色图像转灰度 2. 图像翻转,获得负片 3. 线性灰度转换 4. 对数灰度...

    Python+OpenCV裂缝面积识别系统

    然后,程序读取了一个裂纹样本图像,将其转换为灰度图像。 接下来,程序对图像进行了一系列的图像处理操作。首先进行了平滑处理,使用了均值滤波器进行图像平滑。然后,应用了对数变换,将图像进行了对数变换,增强...

    Python+OpenCV表情识别系统

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

    opencv的全部基础操作,一共109个实例全部都在anaconda3,python3.7,opencv4调试通过。

    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_...

    Java证件照抠图处理示例

    ◦ 转换为灰度图像,以便更好地进行抠图操作。 4. 抠图算法: • 使用OpenCV的阈值函数或其他方法,对图像进行二值化处理,以便更好地识别前景和背景。 ◦ 使用OpenCV的轮廓检测函数(例如findContours)来检测...

Global site tag (gtag.js) - Google Analytics