#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];
}
}
}
}