opencv--颜色物体识别跟踪

HSV颜色空间与人眼较为接近,一般以HSV为颜色检测和识别

H--色调(红-绿-蓝)

S--饱和度(颜色深浅)

V-亮度(颜色亮暗)

opencv H范围(0-180)  S(0-255)  V(0-255)


HSV二值化处理的函数CV_EXPORTS_W void inRange(InputArray src, InputArray lowerb,InputArray upperb, OutputArray dst);

第一个参数是输入图像

第二个参数是低阈值

第三个参数是高阈值//高低阈值指的是hsv的高低阈值,当图像的hsv在高低阈值之间那么输出图像为255白,否则为0

第四个参数是输出图像(大小与输入图像一样,类型是8U)Mat dstImage=Mat::zeros(srcImage.size(),CV_8U);



代码


#include "opencv2/opencv.hpp"
#include "iostream"


using namespace cv;
using namespace std;






int h_min=156;
int s_min=97;
int v_min=159;


int h_max=180;
int s_max=255;
int v_max=255;


void main()
{
Mat srcImage=imread("strawberry4.jpg");
imshow("src",srcImage);
Mat tempImage=srcImage.clone();
cvtColor(srcImage,srcImage,CV_BGR2HSV);
Scalar hsv_min(h_min,s_min,v_min);
Scalar hsv_max(h_max,s_max,v_max);
Mat dstImage=Mat::zeros(srcImage.size(),CV_8U);
inRange(srcImage,hsv_min,hsv_max,dstImage);
Mat element=getStructuringElement(MORPH_RECT,Size(5,5));
morphologyEx(dstImage,dstImage,MORPH_ERODE,element,Point(-1,-1),1);
morphologyEx(dstImage,dstImage,MORPH_DILATE,element,Point(-1,-1),4);
imshow("dst",dstImage);
vector>contours;
findContours(dstImage,contours,RETR_EXTERNAL,CHAIN_APPROX_NONE);
vectorrect(contours.size());
for(int i=0;i {
rect[i]=boundingRect(contours[i]);
int x=rect[i].x;
int y=rect[i].y;
int width=rect[i].width;
int height=rect[i].height;
rectangle(tempImage,Point(x,y),Point(x+width,y+height),Scalar(0,255,0),2);
}
imshow("result",tempImage);
waitKey(0);
}


其中的hsv阈值需要自己用滑动条来确定使用的范围



效果opencv--颜色物体识别跟踪_第1张图片



你可能感兴趣的:(opencv--颜色物体识别跟踪)