目录

一、彩色图灰度化

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(三)彩色图灰度化、通道分离、单通道反差处理(灰度图)、多通道反差处理(彩色图)相关推荐

  1. 判断图片通道数及图片三通道转单通道方法

    判断图片通道数 from PIL import Imageimg=Image.open('image_test/1.png')print(len(img.split())) 三通道转单通道 简化版: ...

  2. 关于图像三通道和单通道的解释

    (一):单通道图, 俗称灰度图,每个像素点只能有有一个值表示颜色,它的像素值在0到255之间,0是黑色,255是白色,中间值是一些不同等级的灰色.(也有3通道的灰度图,3通道灰度图只有一个通道有值,其 ...

  3. 【OpenCv】c++ 入门认识 Mat 类,单通道 Mat 的基本操作

    文章目录 前言 Mat 类 Mat 类的构造方式 Mat 基本操作 单通道 Mat 的基本操作 使用成员变量 rows 和 cols 获取矩阵的行数和列数 使用成员函数 size() 来获取矩阵的尺寸 ...

  4. PS 合并RGB通道 编辑单通道

    找了好多方法,最后法的发现这个方法靠谱 https://www.youtube.com/watch?v=-PKkwywRNI4 右键图层,混合选项 勾掉其他的通道 复制三层就行了

  5. 图片的色彩空间转换、简单色彩跟踪与通道分离、合并(三)

    一 图片的色彩空间转换 灰度色彩空间 单通道,取值范围[0,255] 0黑255白 RGB色彩空间(opencv中习惯用BGR) opencv中R,G,B三通道取值范围均为[0,255]. HSV/H ...

  6. java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理

    java图像处理-(指定区域内)灰度化.透明化(alpha通道)处理 2016年07月25日 21:23:16 阅读数:3944 近日在一家小公司实习,老板要求我写一个图形编辑器,其中涉及到用java ...

  7. matlab实现彩色图像灰度化的三种方法

    一.概要 将彩色图像转换为灰度图像的过程称为灰度化处理. 对于图像而言,灰度化处理就是使彩色的R,G,B分量值相等的过程. 灰度化处理的方法主要有如下3种: 最大值法:使R,G,B的值等于3值中最大的 ...

  8. opencv图像处理初步(一):灰度化和二值化

    一.图像二值化基本原理: 对灰度图像进行处理,设定阈值,在阈值中的像素值将变为1(白色部分),阈值为的将变为0(黑色部分). 二.图像二值化处理步骤: (1)先对彩色图像进行灰度化 //img为原图, ...

  9. java环境opencv灰度化闪退,opencv灰度化有关问题

    当前位置:我的异常网» VC/MFC » opencv灰度化有关问题 opencv灰度化有关问题 www.myexceptions.net  网友分享于:2013-12-30  浏览:139次 ope ...

  10. 2种图像增强方法:图像点运算和图像灰度化处理

    摘要:本文主要讲解图像点运算的灰度化处理,详细介绍常用的灰度化处理方法,并分享了图像颜色空间相互转换,以及三种灰度转换算法的实现. 本文分享自华为云社区<[Python从零到壹] 四十三.图像增 ...

最新文章

  1. Linux配置协同工作目录,Linux学习二:文件权限与目录配置
  2. 记一次kubect init初始化端口占用问题
  3. P3197 [HNOI2008]越狱(快速幂)
  4. JAVA生成并导出json文件
  5. php大马源码 手机网页,php大马源码:【百家号】脸书百科,分析 PHP大马-php_mof SHELL Web程序...
  6. “约见”面试官系列之常见面试题之第六十八篇之本地对象 内置对象 宿主对象(建议收藏)
  7. rtklib 天线相位中心_发射天线的作用
  8. WPF 浏览文件夹,获取其路径
  9. leetcode力扣49. 字母异位词分组
  10. php网站渗透实战_PHP网站安全-漏洞渗透及解决方式—概述
  11. 关于min max 函数凹凸性,以及报童模型中期望库存,期望缺货量的性质
  12. ps批量处理--像素大小修改
  13. 淘客该怎么做,淘客+又是什么
  14. “注释”是程序员的自我修养
  15. 达芬奇17新功能及安装教程
  16. 访问对象存储资源下载变成预览
  17. win7共享打印机设置
  18. python中0x3f_单片机中0x3f代表什么意思
  19. 变量、运算符、表达式、输入与输出
  20. PNG文件结构(PNG图片格式)详解

热门文章

  1. 笔记本电脑桌面不显示计算机,笔记本电脑屏幕不显示怎么回事
  2. 东南大学计算机科学沈桥,走进东南大学,金中学子要做“未来卓越工程师”!...
  3. Oracle批量低耗清除历史数据
  4. visual studio (VS)中文转英文(英文转中文)
  5. strut 多文件上传
  6. linux公社_又一个Linux发行版宣告死亡!曾经是最好的桌面版BSD操作系统
  7. ARPG游戏设计制作随笔
  8. pr基本图形模板无法使用_Pr基本图形板块教程 Premiere Pro CC Essential Graphics
  9. android虚拟手机云之二:应用多开
  10. 关于限制同一个IP访问频率和限制用户登录时候输错密码次数限制(超过即限制)