您好,这个图片计数可以实现吗?有什么难点,大致什么思路,可以说一下嘛?
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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥100 webapi的部署(标签-服务器)
- ¥20 怎么加快手机软件内部计时的时间(关键词-日期时间)
- ¥15 C语言除0问题的检测方法
- ¥15 为什么四分管的内径有的是16mm有的15mm,四分不应该是12.7mm吗
- ¥15 macos13下 ios交叉编译的问题
- ¥15 bgz压缩文件怎么打开
- ¥15 封装dll(引入了pcl的点云设计库)
- ¥30 关于#开发语言#的问题:我需要在抄板的基础上再抄板抄程序,根据RDA8851CM基础上开发
- ¥15 oracle 多个括号,怎么删除指定的括号及里面的内容?
- ¥15 小新14API2019想用bios调风扇