第14课 用openCV数豆豆

除了检测运动,openCV还能做许多有趣且实用的事情。其实openCV和FFmpeg一样都是宝藏开源项目,貌似简单的几行代码功能实现背后其实是复杂的算法在支撑。有志于深入学习的同学可以在入门后进一步研究算法的实现,一定会受益匪浅。

这节课,我们先来看一个简单的例子:数豆豆。这个小例子可以让你领略openCV的强悍。

1.复制demo4并改名为demo14。

2.修改init函数:

cpp 复制代码
//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.添加对应的数豆豆函数:

cpp 复制代码
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::vector<std::vector<cv::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.调试运行,豆豆数量立即就显示出来了,是不是很简单?

相关推荐
kngines25 分钟前
【字节跳动】数据挖掘面试题0003:有一个文件,每一行是一个数字,如何用 MapReduce 进行排序和求每个用户每个页面停留时间
人工智能·数据挖掘·mapreduce·面试题
Binary_ey25 分钟前
AR衍射光波导设计遇瓶颈,OAS 光学软件来破局
人工智能·软件需求·光学软件·光波导
昵称是6硬币32 分钟前
YOLOv11: AN OVERVIEW OF THE KEY ARCHITECTURAL ENHANCEMENTS目标检测论文精读(逐段解析)
图像处理·人工智能·深度学习·yolo·目标检测·计算机视觉
平和男人杨争争1 小时前
机器学习2——贝叶斯理论下
人工智能·机器学习
静心问道1 小时前
XLSR-Wav2Vec2:用于语音识别的无监督跨语言表示学习
人工智能·学习·语音识别
算家计算1 小时前
5 秒预览物理世界,2 行代码启动生成——ComfyUI-Cosmos-Predict2 本地部署教程,重塑机器人训练范式!
人工智能·开源
摆烂工程师1 小时前
国内如何安装和使用 Claude Code 教程 - Windows 用户篇
人工智能·ai编程·claude
云天徽上9 天前
【目标检测】图像处理基础:像素、分辨率与图像格式解析
图像处理·人工智能·目标检测·计算机视觉·数据可视化
Vertira9 天前
PyTorch中的permute, transpose, view, reshape和flatten函数详解(已解决)
人工智能·pytorch·python
heimeiyingwang9 天前
【深度学习加速探秘】Winograd 卷积算法:让计算效率 “飞” 起来
人工智能·深度学习·算法