OpenCV(三)彩色图灰度化、通道分离、单通道反差处理(灰度图)、多通道反差处理(彩色图)
目录
一、彩色图灰度化
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♪(・ω・)ノ
OpenCV(三)彩色图灰度化、通道分离、单通道反差处理(灰度图)、多通道反差处理(彩色图)相关推荐
- 判断图片通道数及图片三通道转单通道方法
判断图片通道数 from PIL import Imageimg=Image.open('image_test/1.png')print(len(img.split())) 三通道转单通道 简化版: ...
- 关于图像三通道和单通道的解释
(一):单通道图, 俗称灰度图,每个像素点只能有有一个值表示颜色,它的像素值在0到255之间,0是黑色,255是白色,中间值是一些不同等级的灰色.(也有3通道的灰度图,3通道灰度图只有一个通道有值,其 ...
- 【OpenCv】c++ 入门认识 Mat 类,单通道 Mat 的基本操作
文章目录 前言 Mat 类 Mat 类的构造方式 Mat 基本操作 单通道 Mat 的基本操作 使用成员变量 rows 和 cols 获取矩阵的行数和列数 使用成员函数 size() 来获取矩阵的尺寸 ...
- PS 合并RGB通道 编辑单通道
找了好多方法,最后法的发现这个方法靠谱 https://www.youtube.com/watch?v=-PKkwywRNI4 右键图层,混合选项 勾掉其他的通道 复制三层就行了
- 图片的色彩空间转换、简单色彩跟踪与通道分离、合并(三)
一 图片的色彩空间转换 灰度色彩空间 单通道,取值范围[0,255] 0黑255白 RGB色彩空间(opencv中习惯用BGR) opencv中R,G,B三通道取值范围均为[0,255]. HSV/H ...
- java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理
java图像处理-(指定区域内)灰度化.透明化(alpha通道)处理 2016年07月25日 21:23:16 阅读数:3944 近日在一家小公司实习,老板要求我写一个图形编辑器,其中涉及到用java ...
- matlab实现彩色图像灰度化的三种方法
一.概要 将彩色图像转换为灰度图像的过程称为灰度化处理. 对于图像而言,灰度化处理就是使彩色的R,G,B分量值相等的过程. 灰度化处理的方法主要有如下3种: 最大值法:使R,G,B的值等于3值中最大的 ...
- opencv图像处理初步(一):灰度化和二值化
一.图像二值化基本原理: 对灰度图像进行处理,设定阈值,在阈值中的像素值将变为1(白色部分),阈值为的将变为0(黑色部分). 二.图像二值化处理步骤: (1)先对彩色图像进行灰度化 //img为原图, ...
- java环境opencv灰度化闪退,opencv灰度化有关问题
当前位置:我的异常网» VC/MFC » opencv灰度化有关问题 opencv灰度化有关问题 www.myexceptions.net 网友分享于:2013-12-30 浏览:139次 ope ...
- 2种图像增强方法:图像点运算和图像灰度化处理
摘要:本文主要讲解图像点运算的灰度化处理,详细介绍常用的灰度化处理方法,并分享了图像颜色空间相互转换,以及三种灰度转换算法的实现. 本文分享自华为云社区<[Python从零到壹] 四十三.图像增 ...
最新文章
- Linux配置协同工作目录,Linux学习二:文件权限与目录配置
- 记一次kubect init初始化端口占用问题
- P3197 [HNOI2008]越狱(快速幂)
- JAVA生成并导出json文件
- php大马源码 手机网页,php大马源码:【百家号】脸书百科,分析 PHP大马-php_mof SHELL Web程序...
- “约见”面试官系列之常见面试题之第六十八篇之本地对象 内置对象 宿主对象(建议收藏)
- rtklib 天线相位中心_发射天线的作用
- WPF 浏览文件夹,获取其路径
- leetcode力扣49. 字母异位词分组
- php网站渗透实战_PHP网站安全-漏洞渗透及解决方式—概述
- 关于min max 函数凹凸性,以及报童模型中期望库存,期望缺货量的性质
- ps批量处理--像素大小修改
- 淘客该怎么做,淘客+又是什么
- “注释”是程序员的自我修养
- 达芬奇17新功能及安装教程
- 访问对象存储资源下载变成预览
- win7共享打印机设置
- python中0x3f_单片机中0x3f代表什么意思
- 变量、运算符、表达式、输入与输出
- PNG文件结构(PNG图片格式)详解
热门文章
- 笔记本电脑桌面不显示计算机,笔记本电脑屏幕不显示怎么回事
- 东南大学计算机科学沈桥,走进东南大学,金中学子要做“未来卓越工程师”!...
- Oracle批量低耗清除历史数据
- visual studio (VS)中文转英文(英文转中文)
- strut 多文件上传
- linux公社_又一个Linux发行版宣告死亡!曾经是最好的桌面版BSD操作系统
- ARPG游戏设计制作随笔
- pr基本图形模板无法使用_Pr基本图形板块教程 Premiere Pro CC Essential Graphics
- android虚拟手机云之二:应用多开
- 关于限制同一个IP访问频率和限制用户登录时候输错密码次数限制(超过即限制)