#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
// HSV+轮廓 追踪物体
int main()
{
Mat src = Mat::zeros(300, 300, CV_8UC3);
src = Scalar(0, 23, 90);
Rect rect1 = Rect(50, 50, 50, 50);
src(rect1).setTo(Scalar(0,255,0));
imshow("src", src);
// 转换hsv颜色空间
Mat hsv;
cvtColor(src, hsv, COLOR_BGR2HSV);
imshow("hsv", hsv);
// 求得绿色目标掩膜
Mat mask;
inRange(hsv,Scalar(35, 43, 46), Scalar(77, 255, 255), mask);// 获得绿色范围的掩膜
imshow("mask", hsv);
// // 对掩膜执行形态学开运算,以消除噪声(可能会比较耗时间)
// Mat kernel = Mat::ones(3, 3, CV_8U);
// morphologyEx(mask, mask, MORPH_OPEN, kernel,2);
// 用Canny操作代替上一步骤, 可以减少运算时间
// 但是一些落在边缘外面的噪点还会存在,可以修改参数,但是比较麻烦
Canny(mask, mask, 100, 200);
imshow("mask-", mask);
// 找出其轮廓,并画框定位
vector<vector<Point>> contours;
findContours(mask, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
for (int i=0;i < contours.size(); i++)
{
// 把噪声看作一种特殊的轮廓,用轮廓面积作筛选
if (contourArea(contours[i]) > src.cols * src.rows / 10)
{
Rect rectTmp = boundingRect(contours[0]);
rectangle(src, rectTmp, Scalar(0, 0, 255), 2, 8);
}
}
imshow("out", src);
waitKey();
return 0;
}
HSV+轮廓 跟踪特定颜色目标
最新推荐文章于 2023-07-16 09:25:55 发布