
阈值测试程序,读取相邻两张图片,将其转为HSV后,采用inrange阈值函数进行二值化,最后统计白色像素点的个数。或者直接RGB通道进行阈值分割。
// #include "stdafx.h" #include "opencv2/opencv.hpp" #include#include #include #include #include #include #include #include #include #include // for fileoutput #include #include using namespace cv; using namespace std; int bSums(Mat src) { int counter = 0; //迭代器访问像素点 Mat_ ::iterator it = src.begin (); Mat_ ::iterator itend = src.end (); for (; it != itend; ++it) { if ((*it) > 0) counter += 1;//二值化后,像素点是0或者255 } return counter; } // Mat frame, frame1, imgThresholded, hsv, diff; //定义矩阵 int main(int argc, char** argv) { frame = imread("G:\研三资料\2021.10月汇报\阈值测试\vs\云彩图\8.jpg"); frame1 = imread("G:\研三资料\2021.10月汇报\阈值测试\vs\云彩图\8_1.jpg"); absdiff(frame, frame1, diff); imshow("frame1", diff); imwrite("G:\研三资料\2021.10月汇报\阈值测试\vs\云彩图\8_81diff.jpg", diff); cvtColor(diff, hsv, CV_BGR2HSV); imshow("frame0", hsv); imwrite("G:\研三资料\2021.10月汇报\阈值测试\vs\云彩图\8_81hsv.jpg", hsv); //threshold(hsv,imgThresholded,95,255,1); inRange(hsv, Scalar(70, 70, 46), Scalar(180, 180, 180), imgThresholded); imshow("frame", imgThresholded); imwrite("G:\研三资料\2021.10月汇报\阈值测试\vs\云彩图\8_81erzhi.jpg", imgThresholded); int a = bSums(imgThresholded);//调用函数bSums cout << "A:" << a; waitKey(0); return 0; }