max value ott param triple gin iter pac .cn ttext
- #include "opencv2/opencv.hpp"#include < iostream > using namespace cv;
- using namespace std;
- Mat srcImg,
- hsv_img;
- int h_min = 0,
- s_min = 0,
- v_min = 0;
- int h_max = 180,
- s_max = 255,
- v_max = 46;
- void onChange(int, void * param) {
- Scalar hsv_min(h_min, s_min, v_min);
- Scalar hsv_max(h_max, s_max, v_max);
- Mat dst = Mat: :zeros(srcImg.size(), srcImg.type());
- inRange(srcImg, hsv_min, hsv_max, dst);
- imshow("HSV", dst);
- }
- void main() {
- srcImg = imread("E://duck2.jpg");
- imshow("src", srcImg);
- cvtColor(srcImg, hsv_img, CV_BGR2HSV); //BGR转到HSV颜色空间
- namedWindow("HSV", CV_WINDOW_AUTOSIZE);
- //创建滚动条
- createTrackbar("h_min", "HSV", &h_min, 180, onChange, 0);
- createTrackbar("s_min", "HSV", &s_min, 255, onChange, 0);
- createTrackbar("v_min", "HSV", &v_min, 255, onChange, 0);
- createTrackbar("h_max", "HSV", &h_max, 180, onChange, 0);
- createTrackbar("s_max", "HSV", &s_max, 255, onChange, 0);
- createTrackbar("v_max", "HSV", &v_max, 255, onChange, 0);
- //回调函数初始化
- onChange(h_min, 0);
- onChange(s_min, 0);
- onChange(v_min, 0);
- onChange(h_max, 0);
- onChange(s_max, 0);
- onChange(v_max, 0);
- waitKey(0);
- }
putText函数定义为
void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, intthickness=1, int lineType=8, bool bottomLeftOrigin=false )
参数为
- #include "opencv2/opencv.hpp"#include < iostream > using namespace cv;
- using namespace std;
- ///green hsv min value
- int h_min = 35;
- int s_min = 110;
- int v_min = 106;
- ///green hsv max value
- int h_max = 77;
- int s_max = 255;
- int v_max = 255;
- void main() {
- //识别图片中颜色物体
- Mat srcImg = imread("E://rgb.jpg");
- imshow("src", srcImg);
- Mat dstImg = srcImg.clone();
- Mat hsv_img; //存储HSV图像
- cvtColor(srcImg, hsv_img, CV_BGR2HSV);
- Scalar hsv_min(h_min, s_min, v_min);
- Scalar hsv_max(h_max, s_max, v_max);
- Mat hsv_green = Mat: :zeros(srcImg.size(), CV_8U);
- inRange(hsv_img, hsv_min, hsv_max, hsv_green);
- medianBlur(hsv_green, hsv_green, 5); //中值滤波
- imshow("hsv_green", hsv_green);
- //找轮廓
- vector < vector < Point >> contours;
- vector < Vec4i > hierarcy;
- //找外层轮廓
- findContours(hsv_green, contours, hierarcy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
- vector < Rect > boundRect(contours.size());
- //遍历每个轮廓
- for (int i = 0; i < contours.size(); i++) {
- boundRect[i] = boundingRect(Mat(contours[i])); //计算外接矩形
- //top、left、right、bottom tl左上 br右下
- rectangle(dstImg, boundRect[i].tl(), boundRect[i].br(), Scalar(0, 255, 255), 2, 8);
- //Point org = boundRect[i].tl();
- Point org = boundRect[i].br();
- putText(dstImg, "green", org, CV_FONT_HERSHEY_SIMPLEX, 1.2f, CV_RGB(0, 255, 0), 2, 8);
- }
- imshow("result", dstImg);
- waitKey(0);
- }
- #include "opencv2/opencv.hpp"using namespace cv;
- //设置HSV颜色区间
- int blue_min_h = 90;
- int blue_min_s = 100;
- int blue_min_v = 100;
- int blue_max_h = 120;
- int blue_max_s = 255;
- int blue_max_v = 255;
- int green_min_h = 60;
- int green_min_s = 100;
- int green_min_v = 100;
- int green_max_h = 75;
- int green_max_s = 255;
- int green_max_v = 255;
- int red_min_h = 0;
- int red_min_s = 100;
- int red_min_v = 100;
- int red_max_h = 10;
- int red_max_s = 255;
- int red_max_v = 255;
- void main() {
- VideoCapture cap;
- cap.open("E://1.mp4");
- if (!cap.isOpened()) //如果视频不能正常打开则返回
- return;
- Mat src,
- dst,
- hsv,
- ROI;
- while (1) {
- cap >> src;
- if (src.empty()) //如果某帧为空则退出循环
- break;
- //imshow("video", src);
- dst = src.clone();
- ROI = src(Rect(0, 0, 360, 354)); //x,y,w,h xy坐标,宽度,高度 区分蓝色按钮和右边的蓝色区域
- GaussianBlur(ROI, ROI, Size(15, 15), 0);
- cvtColor(ROI, hsv, CV_BGR2HSV);
- Scalar blue_min(blue_min_h, blue_min_s, blue_min_v);
- Scalar blue_max(blue_max_h, blue_max_s, blue_max_v);
- Scalar green_min(green_min_h, green_min_s, green_min_v);
- Scalar green_max(green_max_h, green_max_s, green_max_v);
- Scalar red_min(red_min_h, red_min_s, red_min_v);
- Scalar red_max(red_max_h, red_max_s, red_max_v);
- Mat hsv_blue = Mat: :zeros(src.size(), CV_8U);
- Mat hsv_green = Mat: :zeros(src.size(), CV_8U);
- Mat hsv_red = Mat: :zeros(src.size(), CV_8U);
- inRange(hsv, blue_min, blue_max, hsv_blue); //颜色区间范围筛选
- inRange(hsv, green_min, green_max, hsv_green);
- inRange(hsv, red_min, red_max, hsv_red);
- medianBlur(hsv_blue, hsv_blue, 5); //中值滤波
- medianBlur(hsv_green, hsv_green, 5);
- medianBlur(hsv_red, hsv_red, 5);
- //找轮廓
- vector < vector < Point >> contours_blue,
- contours_green,
- contours_red;
- vector < Vec4i > hierarchy_blue,
- hierarchy_green,
- hierarchy_red;
- //蓝色轮廓
- findContours(hsv_blue, contours_blue, hierarchy_blue, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
- vector < Rect > boundRect_blue(contours_blue.size()); //定义外接矩形集合
- for (int i = 0; i < contours_blue.size(); i++) {
- boundRect_blue[i] = boundingRect(Mat(contours_blue[i])); //计算外接矩形
- rectangle(dst, boundRect_blue[i].tl(), boundRect_blue[i].br(), Scalar(0, 255, 255), 2, 8);
- Point org = boundRect_blue[i].br();
- putText(dst, "blue", org, CV_FONT_HERSHEY_SIMPLEX, 1.2f, CV_RGB(0, 0, 255), 2, 8);
- }
- //绿色轮廓
- findContours(hsv_green, contours_green, hierarchy_green, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
- vector < Rect > boundRect_green(contours_green.size()); //定义外接矩形集合
- for (int i = 0; i < contours_green.size(); i++) {
- boundRect_green[i] = boundingRect(Mat(contours_green[i])); //计算外接矩形
- rectangle(dst, boundRect_green[i].tl(), boundRect_green[i].br(), Scalar(0, 255, 255), 2, 8);
- Point org = boundRect_green[i].br();
- putText(dst, "green", org, CV_FONT_HERSHEY_SIMPLEX, 1.2f, CV_RGB(0, 255, 0), 2, 8);
- }
- //红色轮廓
- findContours(hsv_red, contours_red, hierarchy_red, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
- vector < Rect > boundRect_red(contours_red.size()); //定义外接矩形集合
- for (int i = 0; i < contours_red.size(); i++) {
- boundRect_red[i] = boundingRect(Mat(contours_red[i])); //计算外接矩形
- rectangle(dst, boundRect_red[i].tl(), boundRect_red[i].br(), Scalar(0, 255, 255), 2, 8);
- Point org = boundRect_red[i].br();
- putText(dst, "red", org, CV_FONT_HERSHEY_SIMPLEX, 1.2f, CV_RGB(255, 0, 0), 2, 8);
- }
- imshow("result", dst);
- waitKey(20); //每帧延时20毫秒
- }
- cap.release(); //释放资源
- }
opencv学习之路(29)、轮廓查找与绘制(八)——轮廓特征属性及应用
来源: http://www.bubuko.com/infodetail-2338028.html