文章目录

  • 前言
  • 一、多通道的分离合并
    • 多通道分离函数split()
    • 多通道合并函数merge()
  • 二、图像像素统计
    • 计算图像的平均值和标准差

前言

记录opencv有关像素操作的一些函数和功能

一、多通道的分离合并

多通道分离函数split()

形式1:

void split(const Mat & scr,Mat * mvbegin)

scr:待分离的多通道图像

mvbegin:分离后的单通道图像,为数组形式,数组大小需要与图像的通道数相同

形式2:

void split(InputArray m,OutputArrayOfArrays mv)

m:待分离的多通道图像

mv:分离后的单通道图像,为向量(vector)形式

对比:形式1的第二个参数输出一个Mat型的数组,并且数组长度要与图像的通道数相同并且提前定义。

形式2的第二个参数输出一个vector<Mat>容器,不需要知道多通道图像的通道数。

多通道合并函数merge()

形式1:

void merge(const Mat * mv,size_t count,OutputArray dst)

mv(第一种重载原型参数):需要合并的图像数组,其中每个图像必须拥有相同的尺寸和数据类型

count:输入的图像数组的长度,其数值必须大于0

dst:合并输出后的图像,与mv[0]具有相同的尺寸和数据类型,通道数等于所有输入图像的通道数总和

形式2:

void merge(InputArrayOfArrays mv,OutputArray dst)

mv(第二种重载原型参数):需要合并的图像向量(vector),其中每个图像必须拥有相同的尺寸和数据类型

dst:合并输出后的图像,与mv[0]具有相同的尺寸和数据类型,通道数等于所有输入图像的通道数总和

示例程序:

#include<opencv2\opencv.hpp>  //加载OpenCV4的头文件
#include<iostream>
#include<vector>
using namespace std;
using namespace cv; //OpenCV命名空间int main()
{Mat img = imread("lena.jpg");if (img.empty()){cout << "请确认图像文件名称是否正确" << endl;return -1;}Mat HSV;cvtColor(img, HSV, COLOR_RGB2HSV); //RGB图像模型转HSVMat imgs0, imgs1, imgs2;  //用于存放数组类型的结果Mat imgv0, imgv1, imgv2;  //用于存放vector类型的结果Mat result0, result1, result2;  //多通道合并的结果Mat imgs[3];split(img, imgs);  //将img图像的3个通道分别存放到imgs数组中imgs0 = imgs[0];imgs1 = imgs[1];imgs2 = imgs[2];imshow("RGB-B通道", imgs0);  //显示分离后B通道的像素值imshow("RGB-G通道", imgs1);  //显示分离后G通道的像素值imshow("RGB-R通道", imgs2);  //显示分离后R通道的像素值imgs[2] = img;  //将R通道变成完整的RGB三通道模式,是的数组中图像的通道数不一致merge(imgs, 3, result0);  //合并图像//imshow("result0",result0);  //imshow最多显示4个通道,因此结果在Image Watch中查看Mat zero = zero.zeros(img.rows, img.cols, CV_8UC1);  //构建一个全为0的矩阵imgs[0] = zero;imgs[2] = zero;merge(imgs, 3, result1);  //用于还原G通道的真实情况,合并结果为绿色imshow("result1", result1);  //显示合并结果//输入vector参数的多通道分离与合并vector<Mat> imgv;split(HSV, imgv);  //第二个参数为vectorimgv0 = imgv.at(0);imgv1 = imgv.at(1);imgv2 = imgv.at(2);imshow("HSV-H通道", imgv0);  //显示分离后H(色度)通道的像素值imshow("HSV-S通道", imgv1);  //显示分离后S(饱和度)通道的像素值imshow("HSV-V通道", imgv2);  //显示分离后V(亮度)通道的像素值imgv.push_back(HSV);  //将vector中的图像通道数变成不一致merge(imgv, result2);  //合并图像//imshow("result2",result2);  //imshow最多显示4个通道,因此结果在Image Watch中查看waitKey(0);return 0;  //程序结束
}

imgs0(B通道):

imgs1(G通道):

imgs2(R通道):

result0(总共5个通道):

看起来还有点酷

result1(只显示绿色G通道):

result2(HSV模型下的5通道图像):

二、图像像素统计

计算图像的平均值和标准差

形式1:

mean(InputArray src,InputArray mask=noArray())

src:待求平均值的图像矩阵

mask:用于标记求取哪些区域的平均值

可以求取的图像通道数为1~4,该函数返回一个Scalar类型的变量,通过Scalar[n]来查看第n个通道的平均值。

形式2:

meanStdDev(InputArray src,OutputArray mean,OutputArray stddev,InputArray mask=noArray())

src:待求平均值的图像矩阵

mean:图像每个通道的平均值,参数为Mat类型变量

stddev:图像每个通道的标准差,参数为Mat类型变量

mask:用于标记求取哪些区域的平均值和标准差

该函数没有返回值,因为返回的内容在传入的参数中,第二个参数是平均值,第三个参数是标准差

图像的平均值越大,图像整体越亮;图像的标准差越大,图像中明暗的对于越明显

如果对Scalar类型想有更深入的理解,推荐这位博主的博客:OpenCV学习笔记(3)——Scalar数据类型理解_Lavi的专栏-CSDN博客_scalar

来一个示例程序:

#include<opencv2\opencv.hpp>  //加载OpenCV4的头文件
#include<iostream>
#include<vector>
using namespace std;
using namespace cv; //OpenCV命名空间int main()
{system("color F0");  //更改界面输出颜色float a[12] = { 1,2,3,4,5,10,6,7,8,9,10,0 };Mat img = Mat(3, 4, CV_32FC1, a);  //单通道矩阵,3*4Mat imgs = Mat(2, 3, CV_32FC2, a);  //多通道矩阵,2*3*2cout << "/* 用mean求取图像的平均值 */" << endl;Scalar myMean;myMean = mean(imgs);cout << "imgs平均值=" << myMean << endl;  //输出格式为[0,0,0,0]分别对应第一,二,三,四通道cout << "imgs第一个通道的平均值=" << myMean[0] <<"        "<< "imgs第二个通道的平均值=" << myMean[1] << endl;cout << "/* 用meanStdDev同时求取图像的平均值和标准差 */"<<endl;Mat myMeanMat, myStddevMat;meanStdDev(img, myMeanMat, myStddevMat);  //平均值和标准差cout << "img平均值=" << myMeanMat << endl;cout << "img标准差=" << myStddevMat << endl;meanStdDev(imgs, myMeanMat, myStddevMat);cout << "imgs平均值=" << myMeanMat << endl;cout << "imgs标准差=" << myStddevMat << endl;return 0;  //程序结束
}

根据输出结果可以看出,如果不对某一通道进行针对性输出,那么输出的格式就为[0,0,0,0]格式,分别对应第一,二,三,四通道。

感谢阅读!
也欢迎大家关注小白博主,多多鼓励一下!

opencv学习笔记之像素处理相关推荐

  1. OpenCV 学习笔记-day13 像素值统计 统计计算最大最小值,平均值和标准差 (minMaxLoc()和meanStdDev()函数的使用)

    OpenCV 学习笔记 day13 像素值统计 函数 minMaxLoc(); 最大值最小值统计 meanStdDev();平均值和标准方差统计 代码 day13 像素值统计 函数 minMaxLoc ...

  2. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  3. opencv学习笔记3:像素处理

    学习笔记,看的某宝的一个视频学习的 读取像素 返回值=图(位置参数) 灰度图读取像素 灰度度只有两维 d=img[78,155] print(d) 彩色图读取像素 彩色图 有三个通道. 注意openc ...

  4. OpenCV学习笔记(二):3种常用访问图像中像素的方式

    OpenCV学习笔记(二):3种常用访问图像中像素的方式 #include <opencv2/opencv.hpp>using namespace cv; using namespace ...

  5. OpenCV学习笔记02--图像像素处理--二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数

    目录 (一)灰度图像像素处理 (二)彩色图像像素处理 (三)numpy.array库在图像处理中的应用 (四)查看图像的属性信息 接着笔记01继续总结,当我们读取一幅图像的时候,一般为二值图像.灰度图 ...

  6. OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法...

    函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...

  7. opencv学习笔记(二):基于肤色的人手检测

    opencv学习笔记(二):基于肤色的人手检测 原文:http://blog.csdn.net/wzmsltw/article/details/50849810 先写了人手的检测程序,下一步基于检测程 ...

  8. python做直方图-python OpenCV学习笔记实现二维直方图

    本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...

  9. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

最新文章

  1. python怎么导入文件-Python 导入文件过程图解
  2. 数据双向绑定_手把手教你用JavaScript如何实现数据双向绑定
  3. SAP Spartacus在某些屏幕尺寸下无法正常工作的原因分析
  4. python 数据分析找到老外最喜欢的中国美食【完整代码】
  5. 【Visual Studio Code 】使用Visual Studio Code + Node.js搭建TypeScript开发环境
  6. SQL文件示例(Mysql)
  7. 压力测试工具----JMeter
  8. Android studio 下载安装
  9. 计算机音乐转MP3,怎么把歌曲转换成mp3格式_教你把歌曲转换成mp3格式的方法
  10. 在matlab中讲矩阵一次性检验,层次分析法原理和matlab代码实现
  11. SSM框架下打卡签到增加积分功能的实现
  12. Android 自定义View UC下拉刷新效果(一)
  13. Unity Shader Graph 制作 Fade 淡入淡出效果
  14. [转]全面比较Delphi和Visual C++
  15. (附源码)php柘城县农产品销售网站 毕业设计 020832
  16. 【自然语言处理-2】word2vec词嵌入算法“男人”+“女人”=“爱情的坟墓”
  17. 生物药、创新药、仿制药新项目立项调研、评估的重要手段
  18. 缓存Cache概述——缓存Cache1.1.1
  19. 2021苹果CMS安卓萝卜视频原生影视APP源码支持投屏选集倍速弹幕版(前端二开美化版)
  20. mac抹掉磁盘重装系统未能与服务器取得联系_电脑重装系统时遇上的N个问题

热门文章

  1. 中石油大学22春季《大学英语(四)#》第一阶段在线作业
  2. IDEA 解决插件页面转圈问题
  3. 与其去雄安买房,不如找中企动力建自己的平台
  4. GDI+图像去污——四周去污
  5. 在 Windows10 系统下重新安装 Ubuntu22.04 系统
  6. oracle中numeric是什么类型,numeric
  7. 计算机毕业设计之SpringBoot+Vue.js+WebMagic电商数据分析 电商大数据 电商数据采集系统 电商大屏 大数据毕业设计 电商知识图谱
  8. 基于S52单片机的温度测量与报警装置
  9. php 输入表格数据,怎样将导出数据输入Excel 表格-php 怎么把数据导出到excel表格...
  10. 简书CEO 林立:简书钻改,让付出有所得