OpenCV-3.4.3图像通道处理
- 图像通道处理
图像读取和处理都是按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图像通道处理的更多相关文章
- OpenCV 第二课 认识图像的存储结构
OpenCV 第二课 认识图像的存储结构 Mat Mat 类包含两部分,矩阵头和矩阵体.矩阵头包含矩阵的大小,存储方式和矩阵体存储空间的指针.因此,Mat中矩阵头的大小是固定的,矩阵体大小是不定的. ...
- opencv笔记2:图像ROI
time:2015年 10月 03日 星期六 12:03:45 CST # opencv笔记2:图像ROI ROI ROI意思是Region Of Interests,感兴趣区域,是一个图中的一个子区 ...
- opencv分水岭算法对图像进行切割
先看效果 说明 使用分水岭算法对图像进行切割,设置一个标记图像能达到比較好的效果,还能防止过度切割. 1.这里首先对阈值化的二值图像进行腐蚀,去掉小的白色区域,得到图像的前景区域.并对前景区域用255 ...
- 跟我一起学opencv 第二课之图像的掩膜操作
1.掩膜(mask)概念 用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程.用于覆盖的特定图像或物体称为掩模或模板.光学图像处理中,掩模可以足胶片,滤光片等 ...
- openCV学习——一、图像读取、显示、输出
openCV学习——一.图像读取.显示.输出 一.Mat imread(const string& filename,int flags=1),用于读取图片 1.参数介绍 filename ...
- 深入学习OpenCV检测及分割图像的目标区域
准备1:OpenCV常用图片转换技巧 在进行计算机视觉模型训练前,我们经常会用到图像增强的技巧来获取更多的样本,但是有些深度学习框架中的方法对图像的变换方式可能并不满足我们的需求,所以掌握OpenCV ...
- 图像通道、Scalar、分离、合成通道
http://lib.csdn.net/article/opencv/33264 http://blog.csdn.net/laohu_tiger/article/details/17359777 h ...
- 用python简单处理图片(2):图像通道\几何变换\裁剪
一.图像通道 1.彩色图像转灰度图 from PIL import Image import matplotlib.pyplot as plt img=Image.open('d:/ex.jpg') ...
- Halcon学习之三:有关图像通道的函数(R是三通道,B是1通道,G二通道),排列顺序BGR
黑白摄像机会返回每个像素所对应的能量采用结果,这些结果组成了一幅单通道灰度值图像,而对于RGB彩色摄像机,它将返回每个像素所对应的三个采样结果,也就是一幅三通道图像.下面这些是与图像通道有关的函数: ...
随机推荐
- 详解 TCP 超时与重传机制——长文预警
上一篇介绍 TCP 的文章「TCP 三次握手,四次挥手和一些细节」反馈还不错,还是蛮开心的,这次接着讲一讲关于超时和重传那一部分. 我们都知道 TCP 协议具有重传机制,也就是说,如果发送方认为发生了 ...
- 小胖求学系列之-文档生成利器(上)-smart-doc
最近小胖上课总是挂着黑眼圈,同桌小张问:你昨晚通宵啦?小胖有气无力的说到:最近开发的项目接口文档没写,昨晚补文档补了很久,哎,昨晚只睡了2个小时.小张说:不是有生成文档工具吗,类似swagger2.s ...
- 判断浏览器是否启用cookie
<!DOCTYPE html> <html> <body onload="checkCookies()"> <script> fun ...
- CSS中@support的用法
这段时间一直在调试浏览器的兼容性问题,了解到了@support的这个属性,记录下: CSS中的@support主要是用于检测浏览器是否支持CSS的某个属性,其实就是条件判断,如果支持某个属性,你可以写 ...
- 图文结合深入理解JS中的this值
文章目录 Js 中奇妙的this值 1. 初探this 2. this指向总结 2.1 普通函数调用 2.2 对象的方法调用 2.3 构造函数调用 2.4 利用call,apply,bind方法调用函 ...
- NLP(十八)利用ALBERT提升模型预测速度的一次尝试
前沿 在文章NLP(十七)利用tensorflow-serving部署kashgari模型中,笔者介绍了如何利用tensorflow-serving部署来部署深度模型模型,在那篇文章中,笔者利用k ...
- 安装Visual Studio Code并汉化
安装很简单,直接点击安装文件,然后一直点击next就可以了.这款软件是免费的,不需要破解. 下载地址 这里需要使用快捷键[Ctrl+Shift+P],在弹出的搜索框中输入[configure lang ...
- Vue.js实现大文件分片md5断点续传
背景 根据部门的业务需求,需要在网络状态不良的情况下上传很大的文件(1G+).其中会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长,请求超时:3,传输中断,必须重新上传导致前功尽 ...
- BP_Adaboost 模型及其分类应用
一.BP_ Adaboost模型 Adaboost 算法的思想是合并多个“弱”分类器的输出以产生有效分类.其主要步骤为 : (1)首先给出弱学习算法和样本空间(x, y) ,从样本空间中找出 m 组训 ...
- 集合系列 Queue(十一):ArrayDeque
从名字我们可以看出,其实一个双向队列实现,而且底层采用数组实现. public class ArrayDeque<E> extends AbstractCollection<E> ...