• 图像通道处理

图像读取和处理都是按BGR通道顺序进行的

 #include <iostream>
#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp" int main(int argc, char **argv) {
cv::Mat src = cv::imread("/home/cv/Downloads/images/P1180141.JPG", );
cv::resize(src, src, cv::Size(src.cols / , src.rows / ), cv::INTER_CUBIC);
cv::imshow("original_after_resize", src); // blue channel
cv::Mat mytemp1(src.rows, src.cols, CV_8UC3, cv::Scalar(, , ));
cv::imshow("temp test", mytemp1);
// green channel
cv::Mat mytemp2(src.rows, src.cols, CV_8UC3, cv::Scalar(, , ));
cv::imshow("temp test", mytemp2);
// red channel
cv::Mat mytemp3(src.rows, src.cols, CV_8UC3, cv::Scalar(, , ));
cv::imshow("temp test", mytemp3);
cv::waitKey();
return ;
}

或者使用mixChannels函数

 #include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp" int main(int argc, char **argv) {
cv::Mat src = cv::imread("/home/cv/Downloads/images/P1180141.JPG", );
cv::resize(src, src, cv::Size(src.cols / , src.rows / ), cv::INTER_CUBIC);
for (int i = ; i < ; i++) {
cv::Mat temp_bgr(src.rows, src.cols, CV_8UC3, cv::Scalar(, , ));
cv::Mat temp(src.rows, src.cols, CV_8UC1);
cv::Mat out[] = {temp_bgr};
int from_to[] = {i, i};
cv::mixChannels(&src, , out, , from_to, );
cv::imshow("single channel", temp_bgr);
cv::waitKey();
} return ;
}

转换到HSV颜色空间查看效果

 #include <iostream>
#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp" int main(int argc, char **argv) {
cv::Mat src = cv::imread("/home/cv/Downloads/images/P1180141.JPG", );
cv::resize(src, src, cv::Size(src.cols / , src.rows / ), cv::INTER_CUBIC);
cv::imshow("original_after_resize", src); cv::Mat img_hsv;
cv::cvtColor(src, img_hsv, CV_BGR2HSV);
cv::Mat dst;
dst.create(img_hsv.size(), img_hsv.depth()); int ch[] = {, };
int ch1[] = {, };
int ch2[] = {, }; // Hue 色调通道
cv::mixChannels(&img_hsv, , &dst, , ch, );
cv::imshow("hsv-h", dst);
// Saturation 饱和度通道
cv::mixChannels(&img_hsv, , &dst, , ch1, );
cv::imshow("hsv-s", dst);
// Lightness/Value 亮度/像素值通道
cv::mixChannels(&img_hsv, , &dst, , ch2, );
cv::imshow("hsv-v", dst);
cv::waitKey(); return ;
}

转换到YUV空间或YCrCb空间查看效果

 #include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp" int main(int argc, char **argv) {
cv::Mat src = cv::imread("/home/cv/Downloads/images/P1180141.JPG", );
cv::resize(src, src, cv::Size(src.cols / , src.rows / ), cv::INTER_CUBIC);
cv::imshow("original_after_resize", src); // YUV color space
cv::Mat img_yuv;
cv::cvtColor(src, img_yuv, CV_BGR2YUV);
cv::Mat dst;
dst.create(img_yuv.size(), img_yuv.depth()); // Luminance, 明亮度,灰度值
int ch[] = {, };
cv::mixChannels(&img_yuv, , &dst, , ch, );
cv::imshow("yuv-y", dst);
// Chrominance, 色彩及饱和度,指定像素的颜色
int ch1[] = {, };
cv::mixChannels(&img_yuv, , &dst, , ch1, );
cv::imshow("yuv-u", dst);
int ch2[] = {, };
cv::mixChannels(&img_yuv, , &dst, , ch2, );
cv::imshow("yuv-v", dst); // YCrCb color space
cv::Mat ycrb;
cv::cvtColor(src, ycrb, CV_BGR2YCrCb);
std::vector<cv::Mat> mv;
cv::split(ycrb, (std::vector<cv::Mat>&) mv); // Y channel
cv::Mat chy(src.rows, src.cols, CV_8UC1);
chy = mv[].clone();
cv::imshow("Y", chy);
// Cr and Cb channel
// Cr反映RGB输入信号红色部分与RGB信号亮度值之间的差异
// Cb反应RGB输入信号蓝色部分与RGB信号亮度值之间的差异
cv::Mat chu(src.rows, src.cols, CV_8UC1);
chu = mv[].clone();
cv::imshow("Cr", chu);
cv::Mat chv(src.rows, src.cols, CV_8UC1);
chv = mv[].clone();
cv::imshow("Cb", chv);
cv::waitKey(); return ;
}
  •  cv::Mat 类型的成员函数 depth 

查看官方文档

inline
int Mat::depth() const
{
return CV_MAT_DEPTH(flags);
}

其中的 CV_MAT_DEPTH 定义如下

#define CV_MAT_DEPTH(flags)     ((flags) & CV_MAT_DEPTH_MASK)

这里的 CV_MAT_DEPTH_MASK 定义如下

#define CV_MAT_DEPTH_MASK       (CV_DEPTH_MAX - 1)

宏定义中的 CV_DEPTH_MAX 定义如下

#define CV_CN_SHIFT 3
#define CV_DEPTH_MAX (1 << CV_CN_SHIFT)

Mat::type
Returns the type of a matrix element.

C++: int Mat::type() const
The method returns a matrix element type. This is an identifier compatible with the CvMat type system, like CV_16SC3 or 16-bit signed 3-channel array, and so on.

表格来源(OpenCV学习十七:OpenCV中Mat的type)

出处暂不可考

Mat::depth
Returns the depth of a matrix element.

C++: int Mat::depth() const
The method returns the identifier of the matrix element depth (the type of each individual channel). For example, for a 16-bit signed element array, the method returns CV_16S . A complete list of matrix types contains the following values:

#define CV_8U 0
#define CV_8S 1
#define CV_16U 2
#define CV_16S 3
#define CV_32S 4
#define CV_32F 5
#define CV_64F 6
#define CV_USRTYPE1 7
CV_8U - -bit unsigned integers ( .. )
CV_8S - -bit signed integers ( -.. )
CV_16U - -bit unsigned integers ( .. )
CV_16S - -bit signed integers ( -.. )
CV_32S - -bit signed integers ( -.. )
CV_32F - -bit floating-point numbers ( -FLT_MAX..FLT_MAX, INF, NAN )
CV_64F - -bit floating-point numbers ( -DBL_MAX..DBL_MAX, INF, NAN )

转换函数

void cv::transform (InputArray src,
OutputArray dst,
InputArray m
) The function cv::transform performs the matrix transformation of every element of the array src and stores the results in dst :

OpenCV-3.4.3图像通道处理的更多相关文章

  1. OpenCV 第二课 认识图像的存储结构

    OpenCV 第二课 认识图像的存储结构 Mat Mat 类包含两部分,矩阵头和矩阵体.矩阵头包含矩阵的大小,存储方式和矩阵体存储空间的指针.因此,Mat中矩阵头的大小是固定的,矩阵体大小是不定的. ...

  2. opencv笔记2:图像ROI

    time:2015年 10月 03日 星期六 12:03:45 CST # opencv笔记2:图像ROI ROI ROI意思是Region Of Interests,感兴趣区域,是一个图中的一个子区 ...

  3. opencv分水岭算法对图像进行切割

    先看效果 说明 使用分水岭算法对图像进行切割,设置一个标记图像能达到比較好的效果,还能防止过度切割. 1.这里首先对阈值化的二值图像进行腐蚀,去掉小的白色区域,得到图像的前景区域.并对前景区域用255 ...

  4. 跟我一起学opencv 第二课之图像的掩膜操作

    1.掩膜(mask)概念 用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程.用于覆盖的特定图像或物体称为掩模或模板.光学图像处理中,掩模可以足胶片,滤光片等 ...

  5. openCV学习——一、图像读取、显示、输出

    openCV学习——一.图像读取.显示.输出   一.Mat imread(const string& filename,int flags=1),用于读取图片 1.参数介绍 filename ...

  6. 深入学习OpenCV检测及分割图像的目标区域

    准备1:OpenCV常用图片转换技巧 在进行计算机视觉模型训练前,我们经常会用到图像增强的技巧来获取更多的样本,但是有些深度学习框架中的方法对图像的变换方式可能并不满足我们的需求,所以掌握OpenCV ...

  7. 图像通道、Scalar、分离、合成通道

    http://lib.csdn.net/article/opencv/33264 http://blog.csdn.net/laohu_tiger/article/details/17359777 h ...

  8. 用python简单处理图片(2):图像通道\几何变换\裁剪

    一.图像通道 1.彩色图像转灰度图 from PIL import Image import matplotlib.pyplot as plt img=Image.open('d:/ex.jpg') ...

  9. Halcon学习之三:有关图像通道的函数(R是三通道,B是1通道,G二通道),排列顺序BGR

    黑白摄像机会返回每个像素所对应的能量采用结果,这些结果组成了一幅单通道灰度值图像,而对于RGB彩色摄像机,它将返回每个像素所对应的三个采样结果,也就是一幅三通道图像.下面这些是与图像通道有关的函数: ...

随机推荐

  1. Vue中使用iconfont

    学习博客:https://www.imooc.com/article/33597?block_id=tuijian_wz

  2. 前端js分页功能的实现,非常实用,新手必看

    分享一个前端拿到数据后,自己生成分页的案例,案例如图显示,点击搜索后查询数据,显示数据列表,前端根据数据显示正确的分页 附上代码:代码附上,简单粗暴,自己用过的,兼容性好,没有封装,可以很好的分页原理 ...

  3. hikari连接池属性详解

    hikari连接池属性详解 一.主要配置 1.dataSourceClassName 这是DataSourceJDBC驱动程序提供的类的名称.请查阅您的特定JDBC驱动程序的文档以获取此类名称,或参阅 ...

  4. flask之分析线程和协程

    flask之分析线程和协程 01 思考:每个请求之间的关系 我们每一个请求进来的时候都开一个进程肯定不合理,那么如果每一个请求进来都是串行的,那么根本实现不了并发,所以我们假定每一个请求进来使用的是线 ...

  5. Sql中将datetime转换成字符串的方法(CONVERT())

    语法格式:CONVERT (<data_ type>[ length ], <expression> [, style]) style的含义:style 是将DATATIME ...

  6. ps命令输出进程状态S后面加号的含义

    最近发现一个问题,ps命令输出里面进程状态为S+的含义,网上好多文章都说是表明进程“位于在后台进程组”. 例如下面这个ps命令输出说明: D 不可中断 Uninterruptible sleep (u ...

  7. Spire.Cloud 在线编辑

    简介 Spire.Cloud在线编辑器是一款基于网页的 Office 文件编辑工具,支持在网页中打开.编辑.打印 Word.Excel.PPT 文件,支持将文档保存到私有云盘.支持 IE.Chrome ...

  8. 转载 全角字符unicode码对应表

    http://www.mytju.com/classcode/tools/encode_utf8.asp 对应关系查询网站 Uni. GB Uni. GB Uni. GB Uni. GB Uni. G ...

  9. C++ lambda expression

    Emerged since c++11, lambda expression/function is an unnamed function object capable of capturing v ...

  10. 【原创】你的Redis怎么持久化的

    引言 (本文改编自生活真实案例,如有类同,绝不是巧合!) 端午节,烟哥正在一边愉快的学习.... 突然,微信一阵抖动.原来是老刘呼唤烟哥!善良的烟哥本以为人家是要约我出去玩!然而,打开微信一看,出现下 ...