OpenCV(三)彩色图灰度化、通道分离、单通道反差处理(灰度图)、多通道反差处理(彩色图)

article/2025/8/30 1:39:58

目录

一、彩色图灰度化

1、主要函数cvtColor()介绍 

2、代码

3、效果

二、通道分离

1、向量介绍

2、总代码

3、效果

三、单通道(灰度图)反差处理

1、单通道向量访问

2、代码 

3、效果

四、多通道(彩色图)反差处理(彩色图的反差处理)

1、多通道向量访问

2、代码

3、效果

总代码


一、彩色图灰度化

1、主要函数cvtColor()介绍 

彩图灰度化要用到cv2.cvtColor() 颜色转换函数

cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );

. InputArray src:         输入图像即要进行颜色空间变换的原图像,可以是Mat类
. OutputArray dst:      输出图像即进行颜色空间变换后存储图像,也可以Mat类
. int code:                     转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片。

(注:这里用的是COLOR_RGB2GRAY(彩图转灰度图)(用的opencv3,所以用右边的参数))  


. int dstCn = 0:            目标图像通道数,如果取值为0,则由src和code决定

2、代码

//原图转灰度图
#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{Mat img;img = imread("Resource/test.jpg");									//读取if (img.empty()){printf("could not load the picture...");}// 将彩色图转换为灰度图,常采用以下方法:Mat gray_img;cvtColor(img, gray_img, COLOR_RGB2GRAY);					//颜色转换函数//			原图		新图			RGB转GRAYnamedWindow("原图:", WINDOW_AUTOSIZE);imshow("原图:", img);namedWindow("灰度图片:", WINDOW_AUTOSIZE);imshow("灰度图片:", gray_img);waitKey(0);return 0;
}

3、效果

二、通道分离

1、向量介绍

通道分离需要借助矩阵向量,向量特点是可以无限延伸,一个向量存放一组通道数据。

这里的向量可以理解为数学意义上的列向量,构造一个_cn*1的列向量,数据类型_Tp,格式如下:  Vec <Typename _Tp,int _cn>

注:OpenCV中对RGB图像数据的存储顺序BGR,而且Scalar+的顺序也是B+G+R搜索结果。

(是BGR不是RGB)

2、总代码

//通道分离
//通道分离需要用到向量(3个通道分别存入3个向量)
#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;Mat img, Img;
vector<Mat> planes;			//创建向量(存放各通道内元素)//图像初始化
void Image_Init()
{img = imread("Resource/rgb.jpg");									//读取if (img.empty()){printf("could not load the picture...");exit(0);}
}//改变图像大小(便于观看)
void Resize()
{resize(img, Img, Size(img.cols / 2, img.rows / 2));//		原图	  新图	(宽, 高)
}//通道分离
void Split()
{//将原图通道分离split(Img, planes);				//分离通道(3个通道分别存入3个向量)//cout << planes[0];//一个向量存放一组通道数据:比如planes[0]存放所有R,planes[1]存放所有G,planes[2]存放所有B
}//显示图像
void Show()
{//显示imshow("原图:", Img);imshow("蓝色通道:", planes[0]);			//蓝Bimshow("绿色通道:", planes[1]);			//绿Gimshow("红色通道:", planes[2]);			//红R
}int main()
{Image_Init();			//图像初始化Resize();				//改变图像大小(便于观看)Split();				//通道分离Show();					//显示图像waitKey(0);return 0;
}

3、效果

 

三、单通道(灰度图)反差处理

1、单通道向量访问

灰度图单通道,可以以它作为对象进行操作。

访问Mat对象中的值,最直接的方式是使用Mat的成员函数at,如对于单通道且数据类型为CV_32F的对象m,访问它的第i行第j列的值,格式为:m.at<float>(i,j)

grayImg.at<float>(i, j);        //访问grayImg图片的i行j列元素

2、代码 

//单通道访问(灰度图片是单通道)
void OneChannel()
{cvtColor(img, grayImg, COLOR_RGB2GRAY);			//彩图转灰度图imshow("灰度图片:", grayImg);//单通道反差处理for (int i = 0; i < grayImg.rows; i++){for (int j = 0; j < grayImg.cols; j++){//对grayImg的i行j列元素做反差处理grayImg.at<uchar>(i, j) = 255 - (int)grayImg.at<uchar>(i, j);		}}imshow("反差灰度图片:", grayImg);
}

3、效果

四、多通道(彩色图)反差处理(彩色图的反差处理)

1、多通道向量访问

彩色图是多通道,可以以它作为对象进行操作。

访问Mat对象中的值,最直接的方式是使用Mat的成员函数at,如对于单通道且数据类型为CV_32F的对象m,访问它的第i行第j列的值,格式为:m.at<float>(i,j)

OpenCV向量类:

   typedef Vec<uchar, 3> Vec3b;

   typedef Vec<int, 2> Vec2i;

   typedef Vec<float, 4> Vec4f;

   typedef Vec<double, 3> Vec3d;

2、代码

//多通道处理(彩图是多通道)
void MultiChannels()
{for (int i = 0; i < img.rows; i++){//处理方式1:逐向量处理for (int j = 0; j < img.cols; j++){img.at<Vec3b>(i, j)[0] = 255 - img.at<Vec3b>(i, j)[0];		//i行j列0向量(R通道)img.at<Vec3b>(i, j)[1] = 255 - img.at<Vec3b>(i, j)[1];		//i行j列1向量(G通道)img.at<Vec3b>(i, j)[2] = 255 - img.at<Vec3b>(i, j)[2];		//i行j列2向量(B通道)}//处理方式2:逐元素处理/*for (int j = 0; j < img.cols*img.channels(); j++){img.at<uchar>(i, j) = 255 - img.at<uchar>(i, j);}*/}imshow("彩色图片反差处理:", img);
}

3、效果

总代码

//单通道和多通道处理
//单通道处理灰度图,多通道处理彩图
#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;Mat img, grayImg;//单通道处理(灰度图片是单通道)
void OneChannel()
{cvtColor(img, grayImg, COLOR_RGB2GRAY);			//彩图转灰度图imshow("灰度图片:", grayImg);//单通道反差处理for (int i = 0; i < grayImg.rows; i++){for (int j = 0; j < grayImg.cols; j++){//对grayImg的i行j列元素做反差处理grayImg.at<uchar>(i, j) = 255 - (int)grayImg.at<uchar>(i, j);		}}imshow("灰度图片反差处理:", grayImg);
}//多通道处理(彩图是多通道)
void MultiChannels()
{for (int i = 0; i < img.rows; i++){//处理方式1:逐向量处理for (int j = 0; j < img.cols; j++){img.at<Vec3b>(i, j)[0] = 255 - img.at<Vec3b>(i, j)[0];		//i行j列0向量(R通道)img.at<Vec3b>(i, j)[1] = 255 - img.at<Vec3b>(i, j)[1];		//i行j列1向量(G通道)img.at<Vec3b>(i, j)[2] = 255 - img.at<Vec3b>(i, j)[2];		//i行j列2向量(B通道)}//处理方式2:逐元素处理/*for (int j = 0; j < img.cols*img.channels(); j++){img.at<uchar>(i, j) = 255 - img.at<uchar>(i, j);}*/}imshow("彩色图片反差处理:", img);
}int main()
{img = imread("Resource/test.jpg");									//读取if (img.empty()){printf("could not load the picture...");}imshow("原图:", img);//OneChannel();				//单通道处理(灰度图)MultiChannels();				//多通道处理(彩图)waitKey(0);return 0;
}

如果有错误,欢迎斧正,Thanks♪(・ω・)ノ


http://chatgpt.dhexx.cn/article/V0XMECZu.shtml

相关文章

灰度图与RGB图

1.灰度图 灰度图就是单通道图像&#xff0c;而单通道图是指维度数为2的图像。 而灰度就是没有色彩&#xff0c;RGB色彩分量全部相等&#xff08;可将这点与下文的RGB图进行对比&#xff09;。那么灰度图的每个像素点就只有一个值表示颜色&#xff0c;像素值的范围就是[0~255]。…

ER图、ERD图

ER图、ERD图 1. 什么是ERD1.1 举例 2. ERD符号指南2.1 实体2.2 属性2.3 主键2.4 外键2.4 关系2.5 基数2.5.1 一对一的基数的例子2.5.2 一对多的基数的例子2.5.3 多对多的基数的例子 3.概念、逻辑和物理数据模型3.1 概念数据模型3.2 逻辑数据模型3.3 物理数据模型 4.如何绘制ER图…

2.2.2 ER图

2.2.2 ER图 关系型数据库提供了SQL语言&#xff0c;使应用程序开发人员与数据库管理和维护人员能够与数据库进行交互。但是在创建数据库和数据表之前&#xff0c;需要对数据库中的数据表进行设计&#xff0c;并能够正确设计出各数据表之间的关联关系。 通常使用ER图&#xf…

【系统架构】ER图的画图规范和优化点

文章目录 什么是ER图ER图的画图规范组成部分步骤注意 实例 第三弹&#xff0c;讲讲ER图的画图规范以及优化点 什么是ER图 E-R图也称实体-联系图(Entity Relationship Diagram)&#xff0c;提供了表示实体类型、属性和联系的方法&#xff0c;用来描述现实世界的概念模型 ER图…

学好er图

一、什么是er图&#xff1f; ​ 1、 实体-联系图(Entity-Relation Diagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段&#xff0c;形成一个独立于机器&#xff0c;独立于DBMS的ER图模型。 通常将它简称为ER图&#xff0c;相应地可把用ER图描绘的数据模型称为ER模型…

ER图学习笔记(附各个图型的举例,实战案例)

ER图常用图形如下&#xff1a; ER图图形含义详解 实体&#xff08;长方体&#xff09;&#xff1a; 实体字面意思就是实际存在的&#xff0c;例如商品&#xff0c;货物&#xff0c;用户。 属性&#xff08;椭圆&#xff09;&#xff1a; 属性我们不陌生&#xff0c;就是一个…

enterprise architect绘画ER图

ER图的实体&#xff08;entity&#xff09;即数据模型中的数据对象&#xff0c;例如人、学生、音乐都可以作为一个数据对象&#xff0c;用长方体来表示&#xff0c;每个实体都有自己的实体成员&#xff08;entity member&#xff09;或者说实体对象&#xff08;entity instance…

数据库ER图

ER图的实体&#xff08;entity&#xff09;即数据模型中的数据对象&#xff0c;例如人、学生、音乐都可以作为一个数据对象&#xff0c;用长方体来表示&#xff0c;每个实体都有自己的实体成员&#xff08;entity member&#xff09;或者说实体对象&#xff08;entity instance…

java er图_ER图与UML图

ER图&#xff1a;实体-联系图(Entity-Relation Diagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段&#xff0c;ER图提供了表示实体(即数据对象)、属性和联系的方法&#xff0c;用来描述现实世界的概念模型 构成E-R图的基本要素是实体、属性和联系&#xff0c;其表示…

ER图符号含义

ER图在数据库设计中经常用到&#xff0c;用于表示数据库各个表之间的关系。 设计的时候&#xff0c;我个人用到的主要是下图中的两个&#xff1a; Many&#xff1a;一对多 一个数据源对应多个数据库表 One&#xff1a;一对一 一个度量对应一个display设置&#xff0c;一对一…

ER图

文章转载自「开发者圆桌」 E-R图也称实体-联系图(Entity Relationship Diagram)&#xff0c;提供了表示实体类型、属性和联系的方法&#xff0c;用来描述现实世界的概念模型。 用矩形表示实体型&#xff0c;矩形框内写明实体名&#xff1b;用椭圆表示实体的属性&#xff0c;并…

如何画数据库ER图

一、ER图基本概念 ER图分为实体、属性、关系三个核心部分。在ER图中&#xff0c;实体是长方形&#xff0c;属性是椭圆形&#xff0c;关系为菱形。 1、实体&#xff08;entity&#xff09; 即数据模型中的数据对象&#xff08;即数据表&#xff09;&#xff0c;用长方体来表示&…

ER图详解及实例

文章目录 ER图基本概念ER图实例 ER图基本概念 ER图分为实体、属性、关系三个核心部分。在ER图中&#xff0c;实体是长方形&#xff0c;属性是椭圆形&#xff0c;关系为菱形。 实体&#xff08;entity&#xff09;&#xff1a; 即数据模型中的数据对象&#xff08;即数据表&…

什么是E-R图

E-R图&#xff0c;也称为实体关系图&#xff0c;用于显示实体集之间的关系。它提供了一种表示实体类型、属性和连接的方法&#xff1b;用来描述现实世界的概念模型。ER模型是数据库的设计或蓝图&#xff0c;将来可以作为数据库来实现。 在E-R图中&#xff0c;实体集是一组相似的…

绘制ER图

文章目录 前言一、ER图绘图规范二、使用步骤例如一个学生管理系统 前言 概念 ER图&#xff1a;实体关系图&#xff0c;简记E-R图&#xff0c;是指以实体、关系、属性三个基本概念概括数据的基本结构&#xff0c;从而描述静态数据结构的概念模式 一、ER图绘图规范 实体用矩形表…

数据库设计 ER图

一、ER图简介 ER图&#xff0c;简单来说&#xff0c;E是实体&#xff0c;实体有一组属性&#xff1b;R是关系。找到系统中的实体以及实体关系就可以绘制出ER图了。 例如&#xff0c;下图是网上找到的ER图&#xff0c;矩形的是实体&#xff0c;椭圆是属性&#xff0c;实体和实体…

视频录制软件哪个好

我们经常需要录制视频&#xff0c;那么有什么比较好用的视频录制软件呢&#xff1f;其实好用的软件有很多&#xff0c;下面小编就给大家介绍一个名为迅捷屏幕录像工具的软件&#xff0c;并教大家如何使用它录制视频&#xff0c;以下便是具体的操作步骤&#xff0c;希望对大家能…

如何录制游戏视频中的音频

随着软件行业的迅速发展&#xff0c;它给人们的生活带来了许多的便捷&#xff0c;现在很多人在录制一段音频的时候就会需要使用工具来完成&#xff0c;相比之前大家用手机录制来比&#xff0c;这种工具真的为我们解决了很多的烦恼&#xff0c;当我们需要录制电脑中视频音频的时…

怎样在电脑上录制ppt课件?如何录制课件讲解视频

怎样在电脑上录制ppt课件&#xff1f;在当前的环境下&#xff0c;大部分学生都是在家进行上网课&#xff0c;本文就给大家分享几款非常简单实用的录制教学视频的工具。 一、PPT录屏 在windows系统中有个常用软件就是ppt&#xff0c;ppt也能够录屏&#xff0c;只是我们大家都忽…

录制课程用什么软件好?3款超好用的课程视频录课软件

在互联网技术的飞速发展下&#xff0c;在线教学已经成为一种新型的教学形式&#xff0c;与传统的教学方法相比&#xff0c;在线教学具有低成本、突破地域、时间灵活、形式多样的教学方式。 那录制课程用什么软件好&#xff1f;今天小编就跟大家分享3款超好用的课程视频录课&…