您好,这个图片计数可以实现吗?有什么难点,大致什么思路,可以说一下嘛?
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 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 AT89C51控制8位八段数码管显示时钟。
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 下图接收小电路,谁知道原理
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题