opencv 彩色图像分割(inrange)

原文地址: https://www.cnblogs.com/chenzhefan/p/7648433.html

灰度图像大多通过算子寻找边缘区域生长融合来分割图像。

  彩色图像增加了色彩信息,可以通过不同的色彩值来分割图像,常用彩色空间HSV/HSI, RGB, LAB等都可以用于分割!

  笔者主要介绍inrange() 来划分颜色区域。先看看OpenCV的文档:

  C++: void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst)

  C: void cvInRangeS(const CvArr* src, CvScalar lower, CvScalar upper, CvArr* dst)

  • src – first input array.  //
  • lowerb – inclusive lower boundary array or a scalar.
  • upperb – inclusive upper boundary array or a scalar.
  • dst – output array of the same size as src and CV_8U type
  • For two-channel arrays:

  • and so forth.

  意思主要是:

  src:输入图像,CV2常用Mat类型;

  lowerb:lower boundary下限,scalar类型的像素值,单通道scalar取一个值就行,彩图3通道scalar三个值;

  upperb:上限,类型与lowerb同理;

  dst:输出图像,尺寸与src一致,类型是CV_8U,但没有指定通道数。

  对于多通道的输入,输出结果是各个通道的结果相与,当各通道结果都在上下限之内时,输出为255,否则为0。因此也有人将输出理解为掩码模板!

看个例子吧:

int hmax = 360;
int hmax_Max = 360;
//饱和度
int smin = 0;
int smin_Max = 255;
int smax = 255;
int smax_Max = 255;
//亮度
int vmin = 106;
int vmin_Max = 255;
int vmax = 250;
int vmax_Max = 255;
//显示原图的窗口
string windowName = "src";
//输出图像的显示窗口
string dstName = "dst";
//输出图像
Mat dst;
//回调函数
void callBack(int, void*)
{//输出图像分配内存  dst = Mat::zeros(img.size(), CV_32FC3);//掩码  Mat mask;inRange(hsv, Scalar(hmin, smin / float(smin_Max), vmin / float(vmin_Max)), Scalar(hmax, smax / float(smax_Max), vmax / float(vmax_Max)), mask);//只保留  for (int r = 0; r < bgr.rows; r++){for (int c = 0; c < bgr.cols; c++){if (mask.at<uchar>(r, c) == 255){dst.at<Vec3f>(r, c) = bgr.at<Vec3f>(r, c);}}}//输出图像  imshow(dstName, dst);//保存图像  dst.convertTo(dst, CV_8UC3, 255.0, 0);imwrite("HSV_inRange.jpg", dst);
}
void test_main()
{//输入图像  img = imread("E:\\素材图片\\1.png",1);if (!img.data || img.channels() != 3)return ;imshow(windowName, img);//彩色图像的灰度值归一化  img.convertTo(bgr, CV_32FC3, 1.0 / 255, 0);//颜色空间转换  cvtColor(bgr, hsv, COLOR_BGR2HSV);//定义输出图像的显示窗口  namedWindow(dstName, WINDOW_NORMAL);//调节色相 H  createTrackbar("hmin", dstName, &hmin, hmin_Max, callBack);createTrackbar("hmax", dstName, &hmax, hmax_Max, callBack);//调节饱和度 S  createTrackbar("smin", dstName, &smin, smin_Max, callBack);createTrackbar("smax", dstName, &smax, smax_Max, callBack);//调节亮度 V  createTrackbar("vmin", dstName, &vmin, vmin_Max, callBack);createTrackbar("vmax", dstName, &vmax, vmax_Max, callBack);callBack(0, 0);waitKey(0);return;
}

函数外的为全局变量,头文件自己加上就行。

  放两张不同的图片分割结果:

  第一种是通过调节H值将红色和绿色分割开,SV的值我选择保持默认。(忽略结果图右下角的输入法。。。)

      

  第二种调节H值并没有什么改善,但是可以调节S饱和度,将车牌前景和背景对比的更加强烈。(忽略结果图右下角的输入法。。。)

原文博主:https://github.com/chenzhefan/inrange_color

opencv 彩色图像分割(inrange)相关推荐

  1. 【OpenCV 例程300篇】209. HSV 颜色空间的彩色图像分割

    OpenCV 例程200篇 总目录 [youcans 的 OpenCV 例程300篇]209. HSV 颜色空间的彩色图像分割 5.1 HSV 颜色空间的彩色图像分割 HSV 模型是针对用户观感的一种 ...

  2. android opencv中图像分割,opencv在android平台下的开发【4】-图像滤波详解

    前言 在上一篇opencv-android-图像平滑处理文章中,简单介绍了几种图像平滑,也就是图像模糊的方法,使用了几个简单的滤波器,这都属于图像的滤波操作. opencv针对图像的处理提供了imgp ...

  3. 如何在OpenCV中为InRange阈值选择颜色的最佳HSV值

    如何在OpenCV中为InRange阈值选择颜色的最佳HSV值 1. 效果图 2. 源码 参考 之前的博客介绍了如何使用Python,OpenCV通过HSV颜色空间转换检测对象,并进行轨迹追踪.怎么选 ...

  4. LabVIEW彩色图像分割(基础篇—14)

    基于目标颜色的彩色图像分割常包括色彩阈值处理(Color Threshold)和色彩分割(Color Segmentation)两种方法. 色彩阈值处理可以对图像在色彩空间中的3个分量分别进行阈值处理 ...

  5. python opencv 彩色图非局部平均去噪

    python opencv 彩色图非局部平均去噪 代码: import cv2 import numpy as np # 灰度图像去噪 def MeansDenoising(img,N,h,templ ...

  6. 彩色图像分割方法的汇总

    [汇总]彩色图像分割 Menu   SkySeraph Oct.1st 2011  HQU   Email:zgzhaobo@gmail.com    QQ:452728574   Latest Mo ...

  7. Python 计算机视觉(十二)—— OpenCV 进行图像分割

    参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起 ...

  8. 彩色图像分割MATLAB代码

    彩色图像分割模型用的是RGB模型,对三通道分别处理 clear all clc; I=imread('football.jpg'); [M N t]=size(I); I1=I; I2=I; for ...

  9. OpenCV各向异性图像分割anisotropic image segmentation的实例(附完整代码)

    OpenCV各向异性图像分割anisotropic image segmentation的实例 OpenCV各向异性图像分割anisotropic image segmentation的实例 Open ...

最新文章

  1. 【BZOJ】3542: DZY Loves March
  2. 前方车辆检测的常用方法
  3. 2k 幻14_ROG幻14肝游戏有何体验?携RTX系列献上终极光追画面福利
  4. Ureport2源码修改
  5. 如何设计 React 代码结构?
  6. IP组播之组播路由算法
  7. 高并发下如何保证数据库和缓存双写一致性?
  8. 计算机boot进入u盘启动,用U盘重装系统怎么把Boot设置为启动项?
  9. ps还原上一步快捷键,ps返回上一步快捷键是什么
  10. 【Educoder作业】※网页抓取及信息提取
  11. 多臂老虎机(Multi-armed Bandit)MAB学习笔记
  12. 后台录屏、应用外录屏、跨应用录屏、直播屏幕、录屏扩展(ios)
  13. android webview 本地视频播放,javascript – Android WebView不允许加载本地视频文件
  14. html中的matrix属性,transform,matrix属性讲解
  15. myeclipse把选中的字母转换成大写或者大写转小写
  16. java网上销售外文文献_JAVA外文文献+翻译.docx
  17. bt2mag_粉碎Mag CSS问答#2
  18. ChatGPT 简介
  19. 阶跃信号的matlab,单位阶跃信号的表示-matlab
  20. TCGA数据库的基因表达情况分析

热门文章

  1. Linux日志管理(日志配置、日志轮替)
  2. IDEA:Reformat Code 格式化代码
  3. Python打包成exe文件_详细操作
  4. 千手观音王牌对王牌_王牌技术面试的7个技巧
  5. 依赖注入,setter方法注入
  6. 二手交易市场将慢慢落幕还是繁华?
  7. Linux 定义快捷键
  8. IE去掉input的type=”text”输入内容时出现的X和type=”password”出现的眼睛图标
  9. U盘格式转换/系统限制,无法缓存
  10. 股票模拟交易日志(二)