湖南地税局官网站水利建设基金,工商注册核名查询官网,群晖网站建设处理错误500,网站关键字如何设置除了检测运动#xff0c;openCV还能做许多有趣且实用的事情。其实openCV和FFmpeg一样都是宝藏开源项目#xff0c;貌似简单的几行代码功能实现背后其实是复杂的算法在支撑。有志于深入学习的同学可以在入门后进一步研究算法的实现#xff0c;一定会受益匪浅。
这节课#…除了检测运动openCV还能做许多有趣且实用的事情。其实openCV和FFmpeg一样都是宝藏开源项目貌似简单的几行代码功能实现背后其实是复杂的算法在支撑。有志于深入学习的同学可以在入门后进一步研究算法的实现一定会受益匪浅。
这节课我们先来看一个简单的例子数豆豆。这个小例子可以让你领略openCV的强悍。
1.复制demo4并改名为demo14。
2.修改init函数
//capCamHandle CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)capCamThread, (LPVOID)this, 0, NULL);
capImgHandle CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)capImgThread, (LPVOID)this, 0, NULL);
3.添加对应的数豆豆函数
DWORD WINAPI fmle::capImgThread(LPVOID lpParam) {fmle *pThis (fmle*)lpParam;pThis-capImg();return 0;
}int fmle::capImg() {videoCap.open(0);cv::Mat imgMat;imgMat cv::imread(Bean.jpg);// 转换为HSV颜色空间cv::Mat hsvMat;cv::cvtColor(imgMat, hsvMat, cv::COLOR_BGR2HSV); // 定义黄色范围的HSV阈值cv::Scalar lowerColor(26, 43, 46);cv::Scalar upperColor(34, 255, 255);// 对图像进行颜色过滤cv::Mat maskMat;cv::inRange(hsvMat, lowerColor, upperColor, maskMat);// 对二值图像进行形态学操作去除噪点cv::Mat kernel cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));cv::morphologyEx(maskMat, maskMat, cv::MORPH_OPEN, kernel);// 寻找轮廓std::vectorstd::vectorcv::Point contours;cv::findContours(maskMat, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);// 统计豆子数量int beanCount contours.size();cv::Mat resultMat imgMat.clone();cv::drawContours(resultMat, contours, -1, cv::Scalar(0, 0, 255), 2);cv::putText(resultMat, Total: std::to_string(beanCount), cv::Point(0, 290), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);mainDlg-drawMatOfPub(resultMat);return 0;
}
4.调试运行豆豆数量立即就显示出来了是不是很简单