您好,这个图片计数可以实现吗?有什么难点,大致什么思路,可以说一下嘛?
2条回答 默认 最新
关注 opencv计数项目实现代码
#include<iostream> #include<opencv.hpp> using namespace std; using namespace cv; int main() { //加载图像 Mat src = imread("4.jpg"); if (src.empty()) { cout << "no image!" << endl; return -1; } imshow("src", src); //二值化 Mat gray, binary; cvtColor(src, gray, COLOR_BGR2GRAY); imshow("gray", gray); threshold(gray, binary, 0, 255, THRESH_TRIANGLE); imshow("binary", binary); //图像形态学操作 Mat kern1 = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1,-1)); morphologyEx(binary, binary, MORPH_DILATE, kern1,Point(-1,-1),3); imshow("dilate", binary); //距离变换 Mat dist; bitwise_not(binary, binary);//将白色背景变黑 imshow("not", binary); distanceTransform(binary, dist, DIST_L2, 3); normalize(dist, dist, 0.0, 1.0, NORM_MINMAX); dist.convertTo(dist, CV_8UC1); imshow("dist", dist); //阈值分割 Mat img; //threshold(dist, img, 0, 255, THRESH_BINARY | THRESH_OTSU); adaptiveThreshold(dist, img, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 85, 0.0); imshow("img", img); //腐蚀操作 morphologyEx(img, img, MORPH_DILATE, kern1, Point(-1,-1),1); imshow("dilate-img", img); //寻找连通域 vector<vector<Point>>contours; findContours(img, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE); Mat mask = Mat::zeros(src.size(), CV_8UC3); for (size_t i = 0; i < contours.size(); i++) { drawContours(mask, contours, static_cast<int>(i), Scalar(0, 0, 255), -1, 8); } cout << "个数:" << contours.size() << endl; imshow("result", mask); waitKey(0); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 基于卷积神经网络的声纹识别
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 CSAPPattacklab
- ¥15 一直显示正在等待HID—ISP
- ¥15 Python turtle 画图
- ¥15 stm32开发clion时遇到的编译问题