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

Opencv中灰度图像和imread的区别 /*******************************************************/ /*遍历一个文件夹中的100张图片并把他们全部转为8bit的图像*/ /*******************************************************/ #include #include #include using namespa 阅读详情

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);

7.编译程序并运行,运行结果如下:

OpenCV运行结果

各种类型的bmp图片转换成灰度图和二值图 可以将1、4、8、16、24、32位bmp图片转化成灰度图和二值图 立即下载

相关推荐

避坑指南:中国地面气候日值数据集(V3.0)处理中的常见错误与解决方案

本文详细解析了中国地面气候日值数据集(V3.0)处理中的常见错误与解决方案,包括数据清洗、特征值解码、时间序列处理和质量控制等关键步骤。通过Python实战代码示例,帮助研究者高效处理这一包含全国699个气象站多要素日值数据的数据集,避免常见陷阱,提升气候变化研究和农业气象分析的准确性。

xray4的博客 1027

OpenCV学习点滴(三)转换并保存灰度图

先上代码: #include #include #include #include using namespace std; using namespace cv; int main() { Mat image = imread("cat.jpg"); //读图 if (! image.data) { cout << "Could not open

yqahx的专栏 1486

保姆级教程:用YOLOv5+ROS2 Humble搞定奥比中光Dabai DCW深度相机的3D物体定位

本教程详细介绍了如何使用YOLOv5模型和ROS2 Humble系统,结合奥比中光Dabai DCW深度相机实现3D物体定位。从环境配置、模型部署到深度数据融合,提供完整的实战指南,帮助开发者快速掌握三维坐标提取技术,适用于机器人开发和计算机视觉应用。

weixin_26765363的博客 270

opencv学习11——灰度图像读取

一、灰度图像读取,4中实现方式 1.cv2.imread(image,0),在图像读取方法中使用0或者cv2.IMREAD_GRAYSCALE读取灰度图 2. cv2.cvtColor(image,cv2.COLOR_BGR2GRAY),在图像以BGR形式读取完毕后,使用图像色彩转换的方法cvt将图像有BGR转换为灰度图 3.使用代码将BGR格式图像转换为灰度图,转换公式:gray = (b...

DL_GIS 4万+

安捷伦示波器实战指南:从基础操作到精准触发

本文详细介绍了安捷伦示波器的基础操作与高级功能,包括精准触发配置、波形分析和常见问题排查。通过实战技巧和优化建议,帮助工程师快速掌握示波器的核心功能,提升调试效率。特别适合电子工程师和测试技术人员参考使用。

weixin_30839881的博客 135

OCSP环境搭建--Windows Server 2016

OCSP环境搭建--Windows Server 2016 一. OCSP环境中相关信息 1. 服务器1 操作系统:Win Server 2016 Standard版 IP地址:172.16.0.19/23,网关:172.16.0.1,首选DNS:127.0.0.1 服务器角色:域控制器、证书颁发机构、radius服务器、DNS服务器 ...

CsdnCHong_566的博客 3352

图像处理基本方法-将BMP图片灰度化-c语言调用opencv实现

图像处理基本方法-将BMP图片灰度化-c语言调用opencv实现 opencv实现图片灰度化,主要使用cvCvtColor函数实现。 函数定义 void cvCvtColor( const CvArr* src, CvArr* dst, int code ); 其中 src为原始图像数据。 dts为输出图像数据。 code为转换类型,这里使用CV_BGR2GRAY,表示从BGR转换为GRAY灰度图片。 具体函数调用 cvCvtColor(testImage, testImageGray, CV_BGR2G

jack8126的博客 1242

Unity2D像素刀光实现:粒子方向控制与像素级渲染规范

像素风游戏中的刀光特效并非普通粒子动画,而是需严格遵循像素艺术原理的视觉暂留模拟。其核心在于将‘瞬时切割感’转化为程序可执行的渲染逻辑:通过禁用纹理滤波保障1:1像素锐度,绑定刀锋向量控制粒子运动方向,限定≤0.15秒生命周期匹配人眼暂留阈值,并采用Stretched Billboard实现动态拉伸拖影。该方案兼顾美术语义(如直劈、横扫、突刺)与工程约束(Sorting Layer分层、对象池复用、单粒子GPU优化),广泛适用于Unity2D平台的动作反馈系统,尤其适配《空洞骑士》《死亡细胞》类高节奏像素R

weixin_32390647的博客 283

opencv读取灰度图像

本文记录了C++版opencv读取灰度图像的不同方式及区别

RobotFreak的博客 5543

Kisssoft软件在行星齿轮设计上的初试

行星齿轮传动与链传动相比较,具有质量小,体积小,承载能力强,传动比大,传动效率高等优点,但在行星齿轮传动种种优点下,不可避免的带来一些缺点,对其材料的要求过高,在追求传动比大而体积小的同时,其传动结构大大的复杂化,以及在制造和安装过程中较困难,对于行星齿轮传动设计来说,不仅应该了解其优点,而且应该在设计中,充分发挥其优点,且把其缺点降低到最低的限度。从而才能设计出性能优良的行星齿轮传动装置,为我们赛车提供更加强大的动力保证。 Kisssoft软件为我们行星齿轮传动设计提供了一体化方案,从设...

m0_69808569的博客 1万+

Dify学习笔记-知识库(六)

Dify学习笔记-知识库

大数据知识梳理 2万+

Opencv—读取灰度图的方法

灰度图是一种用于表示图像的数字图像,其中每个像素的亮度由单一的灰度值表示。这种灰度值通常在0到255之间,0代表黑色,255代表白色,而其他值则表示不同程度的灰色。因此,灰度图是一种单通道图像,因为它只包含亮度信息,而不包含彩色信息。

AI_dataloads的博客 2315

OpenClaw 从新手到中级完整教程【完整 持续更新版】

OpenClaw(曾用名 ClawdBot/Moltbot)是 2026 年最火的开源 AI Agent 项目,GitHub 已获得超过 68,000 星标。它不是普通的聊天机器人,而是一个真正能够执行任务的个人 AI 助理。

FeelTouch Labs 3115

[转]OpenCV: 在VC中读取文件并转换灰度图像

 写的挺好的,转给大家1.在CRMBCheckDoc.h中添加变量public: IplImage *TheImage; //定义图像指针,类型IplImage IplImage *GrayImage; 2.CRMBCheckDoc类初始化和析构函数CRMBCheckDoc::CRMBCheckDoc(){

笑风生 3478

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

opencv读取文件夹下的所有图片并写入新的文件中

在网上找了大多都是如下方法: string input_path = "D:\\test_images\\in\\*.png"; vector<string> image_list; //opencv3.x中的string要改成String cv::glob(input_path, image_list); // 所有文件以具体路径方式,保存在list内 Mat image,...

Shannon_1997的博客 936

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OpenCV 中 int 转换 string

https://www.cnblogs.com/kuotian/p/6365613.html #include <iostream> #include <opencv2/opencv.hpp> #include <string> using namespace cv; using namespace std; int main() { s...

ProtocolYue的博客 2785

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python读取文件夹下所有图片的灰度值,使用python和opencv将文件夹中的图像转换为灰度并将其写入特定的文件夹...

import globimport cv2import osimport numpy as npfrom PIL import Imageimages=[]images=np.array(images)path='C:\Users\Quantum\Desktop\test'count=0images = [cv2.imread(file,0) for file in glob.glob("E:\h...

weixin_35968572的博客 617

opencv读取多个视频获取当前帧数并阁帧数截图保存

#include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/calib3d/calib3d.hpp> using namespace std; using namespace cv; char image_name[30]; int i=1; int main() { VideoCapture cap; //cap.open(0); //打开摄像头 cap.open("3.

weixin_44152895的博客 1183

opencv如何将彩色图转换为灰度图并保存灰度图

#include <opencv2\opencv.hpp> #include <iostream> #include <string> #pragma comment(linker, " /subsystem:\"windows\" /entry:\"mainCRTStartup\" ") using namespace std; using namespace...

chiyiwei7384的博客 3518

【OpenCV实战】读取并处理视频文件帧

为什么要有这个小例子,因为在做目标检测的时候经常要读取视频帧,并在訪帧上进行目标检测再播放出来以观察效果。 # coding: utf-8 import numpy as np import cv2 import os # VideoCapture既支持视频文件的读取也支持从摄像机中读取视频 cap = cv2.VideoCapture("/Users/left/ai/data/vi...

6074

使用C++语言读取*.mat文件中的数据

借助于Matlab的接口函数,在Visual Studio中使用C++语言读取*.mat文件中的数据(这里主要是2维矩阵(灰度图像)和3维矩阵(彩色图像))到OpenCV中的Mat数据结构中并显示图像,同时实现将灰度图像转化为伪彩色图像(类型为Matlab中的colormap jet),最后调用Windows的API函数实现窗口尺寸的自由调整。

Destiny0321的专栏 2万+

OpenCV之灰度读取

灰度读取: 前面提到了如何用Imgcodecs类的imread()方法进行读取图像,在介绍时多使用imread(String: filePath) 这个构造方法进行初始化,实际上还可以指定读取模式进行初始化。即使用imread(String filePath, int flags) 该方法进行初始化。flags系指定模式的图片读取,如设置图像通道等。 Java代码: 本例环境在JavaFX中,只需在Stage中添加一个按钮用以点击弹出文件选择框,另一个为ImageView用以显示图片即可。这里采用MVC模式

kicinio的博客 3826

OpenCV中图像的读取与显示

在OpenCV中,有一些函数可用于图像读取和保存,这些函数都在命名空间cv中,所以使用时有两种方式,一种是在函数头部声明using namespace cv;第二种方式就是使用cv作为函数的限定。 从文件中读入一幅图像可以使用imread函数来读取图像, Mat img=imread(filename); 该语句将filename所指定路径的指定文件读取到img数组中

Pslwq的专栏 859

OPenCV 中 int 转换 string

#include <iostream> #include <opencv2/opencv.hpp> #include <string> using namespace cv; using namespace std; int main() { string fileName, grayFile; for(int i = 101; i ...

ProtocolYue的博客 1475

opencv--视频读取

OpenCV(Open Source Computer Vision Library)是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,OpenCV的设计目标是执行速度尽可能的快和构建一个简单易用的计算机视觉框架。它主要用于实时视觉应用。下面来介绍怎样读取视频如果读取的有内容,open_vd返回True,否则返回Falseframe即为图像的内容这里要用到一个while循环当图像读取完之后,frame就没有内容了,然后跳出循环即可将每一帧图像转换为灰度图像参数要输入两个值。

AI_dataloads的博客 359
上一篇: OpenCV----GUI 命令
下一篇: MFC 画坐标系以及画灰度图像的直方图
裸奔人生
博客等级 码龄17年 53粉丝 46原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值