opencv 彩色图像分割(inrange)
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)相关推荐
- 【OpenCV 例程300篇】209. HSV 颜色空间的彩色图像分割
OpenCV 例程200篇 总目录 [youcans 的 OpenCV 例程300篇]209. HSV 颜色空间的彩色图像分割 5.1 HSV 颜色空间的彩色图像分割 HSV 模型是针对用户观感的一种 ...
- android opencv中图像分割,opencv在android平台下的开发【4】-图像滤波详解
前言 在上一篇opencv-android-图像平滑处理文章中,简单介绍了几种图像平滑,也就是图像模糊的方法,使用了几个简单的滤波器,这都属于图像的滤波操作. opencv针对图像的处理提供了imgp ...
- 如何在OpenCV中为InRange阈值选择颜色的最佳HSV值
如何在OpenCV中为InRange阈值选择颜色的最佳HSV值 1. 效果图 2. 源码 参考 之前的博客介绍了如何使用Python,OpenCV通过HSV颜色空间转换检测对象,并进行轨迹追踪.怎么选 ...
- LabVIEW彩色图像分割(基础篇—14)
基于目标颜色的彩色图像分割常包括色彩阈值处理(Color Threshold)和色彩分割(Color Segmentation)两种方法. 色彩阈值处理可以对图像在色彩空间中的3个分量分别进行阈值处理 ...
- python opencv 彩色图非局部平均去噪
python opencv 彩色图非局部平均去噪 代码: import cv2 import numpy as np # 灰度图像去噪 def MeansDenoising(img,N,h,templ ...
- 彩色图像分割方法的汇总
[汇总]彩色图像分割 Menu SkySeraph Oct.1st 2011 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Mo ...
- Python 计算机视觉(十二)—— OpenCV 进行图像分割
参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起 ...
- 彩色图像分割MATLAB代码
彩色图像分割模型用的是RGB模型,对三通道分别处理 clear all clc; I=imread('football.jpg'); [M N t]=size(I); I1=I; I2=I; for ...
- OpenCV各向异性图像分割anisotropic image segmentation的实例(附完整代码)
OpenCV各向异性图像分割anisotropic image segmentation的实例 OpenCV各向异性图像分割anisotropic image segmentation的实例 Open ...
最新文章
- 【BZOJ】3542: DZY Loves March
- 前方车辆检测的常用方法
- 2k 幻14_ROG幻14肝游戏有何体验?携RTX系列献上终极光追画面福利
- Ureport2源码修改
- 如何设计 React 代码结构?
- IP组播之组播路由算法
- 高并发下如何保证数据库和缓存双写一致性?
- 计算机boot进入u盘启动,用U盘重装系统怎么把Boot设置为启动项?
- ps还原上一步快捷键,ps返回上一步快捷键是什么
- 【Educoder作业】※网页抓取及信息提取
- 多臂老虎机(Multi-armed Bandit)MAB学习笔记
- 后台录屏、应用外录屏、跨应用录屏、直播屏幕、录屏扩展(ios)
- android webview 本地视频播放,javascript – Android WebView不允许加载本地视频文件
- html中的matrix属性,transform,matrix属性讲解
- myeclipse把选中的字母转换成大写或者大写转小写
- java网上销售外文文献_JAVA外文文献+翻译.docx
- bt2mag_粉碎Mag CSS问答#2
- ChatGPT 简介
- 阶跃信号的matlab,单位阶跃信号的表示-matlab
- TCGA数据库的基因表达情况分析