0
点赞
收藏
分享

微信扫一扫

识别蓝色镜头

cnlinkchina 2022-01-23 阅读 55
opencv

#include<opencv2/highgui/highgui.hpp>

#include<opencv2/highgui/highgui_c.h>

#include<opencv2/imgproc/imgproc.hpp>

#include<iostream>

using namespace cv;

using namespace std;

void Pickupgreen(Mat& inputframe, Mat& outputframe);

int main()

{
VideoCapture capture(0);
while (1)
{
Mat frame;
Mat greenframe;
capture >> frame;
imshow("读取视频", frame);
Pickupgreen(frame, greenframe);
Mat Mid;
        cvtColor(greenframe, Mid, COLOR_BGR2GRAY);    //转为灰图
        blur(Mid, Mid, Size(8, 8));        //降噪
        Canny(Mid, greenframe, 3, 9, 3);    
imshow("视频", greenframe);
char key = (char)waitKey(300);
if (key == 27)
break;
}
return 0;
}

void Pickupgreen(Mat& inputframe, Mat& outputframe)

{
Mat hsvframe;

cvtColor(inputframe, hsvframe, COLOR_BGR2HSV);

outputframe = Mat(hsvframe.rows, hsvframe.cols, CV_8UC3, cv::Scalar(255, 255, 255));

int rowNumber = hsvframe.rows;

int colNumber = hsvframe.cols;

double H = 0.0, S = 0.0, V = 0.0;

for (int i = 0; i < rowNumber; i++)

{
for (int j = 0; j < colNumber; j++)

{
H = hsvframe.at<Vec3b>(i, j)[0];

S = hsvframe.at<Vec3b>(i, j)[1];

V = hsvframe.at<Vec3b>(i, j)[2];

if ((H >= 75 && H <= 130) && S >= 43 && V >= 46)

{
outputframe.at<Vec3b>(i, j)[0] = inputframe.at<Vec3b>(i, j)[0];

outputframe.at<Vec3b>(i, j)[1] = inputframe.at<Vec3b>(i, j)[1];

outputframe.at<Vec3b>(i, j)[2] = inputframe.at<Vec3b>(i, j)[2];

}

}

}

}

举报

相关推荐

0 条评论