HSV色彩空间对照表+inRange实现像素分离
一、概述
概述:主要介绍一下HSV色彩空间对照表+inRange对颜色进行分离
inRange(img,low,high),函式会将位于两个区域间的值置为255,位于区间外的值置为0
HSV色彩空间对照表图:
上面的图表使用如下:
例如:过滤黄色像素[(26,43,46)(34,255,255)],ps:此处在真正使用的时候可以适当的把lower调的再小一点,把upper调整的再大一点,因为上表给出的是标准参考值,具体需要
根据开发中的实际情况而定。
ps:下面会写一个小例子来验证上述结论
二、代码示例
Color_Separate_In_Range::Color_Separate_In_Range(QWidget *parent) : MyGraphicsView{parent} { this->setWindowTitle("HSV+inRange实现色彩分离案例"); } void Color_Separate_In_Range::dropEvent(QDropEvent *event){ path = event->mimeData()->urls().at(0).toLocalFile(); showColorSplit(path.toStdString().c_str()); } void Color_Separate_In_Range::showColorSplit(const char *filePath){ Mat src = imread(filePath); if(src.empty()){ qDebug()<<"图片为空"; return; } imshow("src",src); //将图片转HSV色彩空间 Mat hsv; cvtColor(src,hsv,COLOR_BGR2HSV); Mat mask;//掩码遮罩 //使用inRang过滤像素 inRange(hsv,Scalar(15,30,32),Scalar(50,255,255),mask); imshow("result",mask); //执行形态学操作去除噪声 Mat kernel = getStructuringElement(MORPH_RECT,Size(5,5),Point(-1,-1)); morphologyEx(mask,mask,MORPH_OPEN,kernel,Point(-1,-1)); imshow("morphologyEx",mask); //腐蚀 dilate(mask,mask,kernel,Point(-1,-1),2); imshow("erode",mask); vector<vector<Point>> contours; vector<Vec4i> heri; //寻找最大外接矩形 findContours(mask,contours,RETR_EXTERNAL,CHAIN_APPROX_SIMPLE); double maxArea = contourArea(contours[0]); int index = 0; for(size_t i = 0;i<contours.size();i++){ double area = contourArea(contours[i]); if(maxArea<=area){ maxArea = area; index = i; } } Rect rect = boundingRect(contours[index]); Rect rect2 = Rect(rect.x,rect.y,rect.width,rect.width); rectangle(src,rect2,Scalar(0,0,255),2,LINE_8); imshow("final Result",src); circle(src,Point(rect.x+rect.width/2,rect.y+rect.width/2),rect.width/2,Scalar(0,0,255),3,LINE_8); imshow("circle",src); }
三、演示图像
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库