文章目录

  • 一、函数简介
  • 二、示例:
    • 示例2

一、函数简介

OpenCV—python 颜色空间(RGB,HSV,Lab)

inRange()函数
OpenCV中的inRange()函数将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0),该功能类似于之间所讲的双阈值化操作。

函数签名:

    void inRange(InputArray src, InputArray lowerb,InputArray upperb, OutputArray dst);

检查数组元素是否在另外两个数组元素值之间。这里的数组通常也就是矩阵Mat或向量。dst:二值化之后的图像。

参数解释:
参数1:输入要处理的图像,可以为单通道或多通道。
参数2:包含下边界的数组或标量。
参数3:包含上边界数组或标量。
参数4:输出图像,与输入图像src 尺寸相同且为CV_8U 类型。

copyTo()
两个重载函数:

void copyTo( OutputArray m ) const;
void copyTo( OutputArray m, InputArray mask ) const;

使用方法:
image.copyTo(OutputArray )     将 image 图像数据拷贝到 OutputArray 图像中。
image.copyTo(OutputArray ,mask) 将 image 图像数据 (与mask 对应图像数据中 mask!=0的区域 ) 拷贝到 OutputArray 图像中。

二、示例:

头文件 quick_opencv.h:声明类与公共函数

#pragma once
#include <opencv2\opencv.hpp>
using namespace cv;class QuickDemo {public:...void inrange_Demo(Mat& image);
};

主函数调用该类的公共成员函数

#include <opencv2\opencv.hpp>
#include <quick_opencv.h>
#include <iostream>
using namespace cv;int main(int argc, char** argv) {Mat src = imread("D:\\Desktop\\pandas_small22.png");if (src.empty()) {printf("Could not load images...\n");return -1;}namedWindow("input", WINDOW_NORMAL);imshow("input", src);QuickDemo qk;qk.inrange_Demo(src);waitKey(0);destroyAllWindows();return 0;
}

源文件 quick_demo.cpp:实现类与公共函数

void QuickDemo::inrange_Demo(Mat& image) {Mat hsv, mask;cvtColor(image, hsv, COLOR_BGR2HSV);inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);imshow("mask", mask);Mat redback = Mat::zeros(image.size(), image.type());redback = Scalar(40, 40, 200);bitwise_not(mask, mask);imshow("~mask", mask);image.copyTo(redback, mask);imshow("redback", redback);
}

效果(我给熊猫换红竹):

示例2

void QuickDemo::inrange_Demo(Mat& image) {int height = image.rows;int width = image.cols;const char* colors[8] = { "raw_image","red_mask","orange_mask","yellow_mask","green_mask","cyan_mask","blue_mask","purple_mask" };//Mat result = Mat::zeros(Size(height * 4 + 5*3, width * 2 + 5), CV_8UC3);Mat result(height * 4 + 5 * 3, width * 2 + 5, CV_8UC3, Scalar(127, 127, 127));Mat hsv, red_mask, red0_mask, red1_mask, green_mask, blue_mask;Mat orange_mask, yellow_mask, cyan_mask, purple_mask;cvtColor(image, hsv, COLOR_BGR2HSV);//红inRange(hsv, Scalar(  0, 43, 46), Scalar( 10, 255, 255), red0_mask);inRange(hsv, Scalar(156, 43, 46), Scalar(180, 255, 255), red1_mask);bitwise_or(red0_mask, red1_mask, red_mask);//橙、黄inRange(hsv, Scalar(11, 43, 46), Scalar(25, 255, 255), orange_mask);inRange(hsv, Scalar(26, 43, 46), Scalar(34, 255, 255), yellow_mask);//绿、青、蓝、紫inRange(hsv, Scalar( 35, 43, 46), Scalar( 77, 255, 255), green_mask);inRange(hsv, Scalar( 78, 43, 46), Scalar( 99, 255, 255), cyan_mask);inRange(hsv, Scalar(100, 43, 46), Scalar(124, 255, 255), blue_mask);inRange(hsv, Scalar(125, 43, 46), Scalar(155, 255, 255), purple_mask);cvtColor(red_mask, red_mask, COLOR_GRAY2BGR);cvtColor(orange_mask, orange_mask, COLOR_GRAY2BGR);cvtColor(yellow_mask, yellow_mask, COLOR_GRAY2BGR);cvtColor(green_mask, green_mask, COLOR_GRAY2BGR);cvtColor(cyan_mask, cyan_mask, COLOR_GRAY2BGR);cvtColor(blue_mask, blue_mask, COLOR_GRAY2BGR);cvtColor(purple_mask, purple_mask, COLOR_GRAY2BGR);image.copyTo(      result(Rect(0,             0,             width, height)));red_mask.copyTo(   result(Rect(width + 5,     0,             width, height)));orange_mask.copyTo(result(Rect(0,            height + 5,     width, height)));yellow_mask.copyTo(result(Rect(width + 5,    height + 5,     width, height)));green_mask.copyTo( result(Rect(0,         2 * height + 5*2,  width, height)));cyan_mask.copyTo(  result(Rect(width + 5, 2 * height + 5*2,  width, height)));blue_mask.copyTo(  result(Rect(0,         3 * height + 5*3, width, height)));purple_mask.copyTo(result(Rect(width + 5, 3 * height + 5*3, width, height)));int half_x = (int)width / 3;int half_y = (int)height * 0.95;for (int i = 0; i < 4; i++){int y = i * height + 5 * i;putText(result, colors[2*i], Point(half_x, y + half_y), cv::FONT_HERSHEY_COMPLEX, 1, Scalar(100, 255, 255), 1, 8);putText(result, colors[2*i+1], Point(width + 5 + half_x, y + half_y), cv::FONT_HERSHEY_COMPLEX, 1, Scalar(100, 255, 255), 1, 8);}imwrite("result.png", result);waitKey(0);
}

更多阅读:
https://blog.csdn.net/qq_37791134/article/details/80984508

OpenCV + CPP 系列(九)颜色空间相关推荐

  1. OpenCV + CPP 系列(十九)直方图比较 与 直方图反向投影,投影分割

    文章目录 一.直方图比较 计算公式 效果演示 二.直方图反向投影 三.投影分割 一.直方图比较 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算H1与H2的之间的距离 ...

  2. OpenCV + CPP 系列(廿九)点与多边形的关系

    文章目录 一.简介 二.效果演示 一.简介 比较常见的判断点与多边形关系的算法有射线法.面积法.点线判断法和弧长法等,算法复杂度都为O(n),不过只有射线法可以正确用于凹多边形,其他3个只可以用于凸多 ...

  3. OpenCV + CPP 系列(卅九)图像特征提取(Haar特征)

    文章目录 Haar特征介绍(Haar Like Features) Haar特征介绍(Haar Like Features) Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征.它分为 ...

  4. OpenCV + CPP 系列(卌二)图像特征匹配( KAZE/AKAZE)

    文章目录 一.KAZE简介 二.代码演示 特征检测效果对比 演示匹配 一.KAZE简介 ECCV2012中出现了一种比SIFT更稳定的特征检测算法KAZE ([1]).KAZE的取名是为了纪念尺度空间 ...

  5. OpenCV + CPP 系列(卅三)图像特征提取(Harris角点检测、Shi-Tomasi角点检测、自定义角点检测)

    文章目录 一.常用图像特征描述 二.Harris角点检测 演示Harris角点检测 三.Shi-Tomasi角点检测 四.自定义角点检测器 一.常用图像特征描述 SIFT.SURF.HOG.Haar. ...

  6. OpenCV + CPP 系列(卌一)图像特征匹配( FLANN 匹配)

    文章目录 一.FLANN简介 演示SURF--Flann 二.单应性矩阵 一.FLANN简介 FLANN库全称是Fast Library for Approximate Nearest Neighbo ...

  7. OpenCV + CPP 系列(卅五)图像特征提取(SURF特征检测、SIFT特征检测)

    文章目录 一.SIFT特征检测 二.SURF特征检测 演示SURF.SIFT特征检测 OpenCV-python 角点特征检测之二(SIFT.SURF.ORB) 一.SIFT特征检测 SIFT(Sca ...

  8. OpenCV + CPP 系列(卅四)图像特征提取(亚像素级别角点检测)

    文章目录 亚像素级别角点检测 演示像素坐标检测 亚像素级别角点检测 亚像素:在生成数字图像处理时(拍照等)我们是将物理世界中连续的图像进行了离散化处理.现实世界中颜色为连续的且有无数种类,成像到像素面 ...

  9. OpenCV入门系列 —— boxFilter盒子滤波

    OpenCV入门系列 -- boxFilter盒子滤波 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识 ...

最新文章

  1. 数字大脑学术沙龙:“城市大脑与应急管理专题研讨会”成功召开
  2. linux下删除乱码文件、目录
  3. 集成学习-Boosting集成学习算法LightGBM
  4. Mysql日志-RedoLog、UndoLog和BinLog的关系捋顺
  5. rsync实现文件同步
  6. sql管理:索引超出范围必须为非负值并小于集合大小_java面试基础知识-数据库基础知识(数据库索引部分)...
  7. 输入法全屏_五笔输入法那么方便,为什么败给了拼音?如今,我可算是明白了...
  8. 渗透中Meterpreter基本操作和对应的windows上的排查或者现象
  9. 2013-2017蓝桥杯省赛C++A组真题总结(题型及解法)
  10. luogu P2344 奶牛抗议 DP 树状数组 离散化
  11. 关于Maven构建的项目依赖范围
  12. 安装,激活(不更新升级)Navicat premium12.0.24(12.0.18)
  13. DCDC电源中同步与异步的区别
  14. 孙子兵法——精华摘录
  15. word 中如何去掉复制的文字的底纹?
  16. python用的最多的版本_为什么有如此多的python版本
  17. 累加数Python解法
  18. python中turtle画笑脸_怎么用python实现画笑脸
  19. 2021年重庆高考成绩分数段查询,2021重庆高考总成绩一分一段表出炉
  20. ubuntu解决微信无法输入中文

热门文章

  1. 搞语音的有关音频的基础知识
  2. 骨传导耳机是什么,骨传导耳机对耳朵有什么好处吗
  3. curl ip.sb查询公网ip
  4. Android P 正式到来
  5. JAVA程序猿推荐看的15本书_错过了是你损失
  6. 7 款优秀 Markdown 编辑工具推荐
  7. 联想G40-30进入PE鼠标键盘失灵解决方法
  8. ubuntu安装过程中提示: the path is not vaild path to the gcc binary等gcc路径不对和kernel不存在?
  9. 传奇世界手游活人最多服务器,传奇世界手游那些不为人知小技巧分享
  10. bde连接oracle失败,BDE联接出错,求助