当前位置:网站首页>【opencv】图像形态学操作-opencv标记不同连通域的位置
【opencv】图像形态学操作-opencv标记不同连通域的位置
2022-07-06 22:59:00 【GLL_】
【opencv】图像形态学操作-opencv标记不同连通域的位置
/** @overload
@param image the 8-bit single-channel image to be labeled
@param labels destination labeled image
@param stats statistics output for each label, including the background label.
Statistics are accessed via stats(label, COLUMN) where COLUMN is one of
#ConnectedComponentsTypes, selecting the statistic. The data type is CV_32S.
@param centroids centroid output for each label, including the background label. Centroids are
accessed via centroids(label, 0) for x and centroids(label, 1) for y. The data type CV_64F.
@param connectivity 8 or 4 for 8-way or 4-way connectivity respectively
@param ltype output image label type. Currently CV_32S and CV_16U are supported.
*/
CV_EXPORTS_W int connectedComponentsWithStats(InputArray image, OutputArray labels,
OutputArray stats, OutputArray centroids,
int connectivity = 8, int ltype = CV_32S);
system("color F0");
Mat img = imread("D:/image/ml2.png");
if (img.empty()) {
cout << "img is empty." << endl;
return;
}
//imshow("srcImg", img);
Mat rice, riceBW;
cvtColor(img, rice, COLOR_BGR2GRAY);
imshow("rice", rice);
threshold(rice, riceBW, 50, 255, THRESH_BINARY);
imshow("riceBW", riceBW);
RNG rng(10086);
Mat out, stats, centroids;
//
int number = connectedComponentsWithStats(riceBW, out, stats, centroids, 8, CV_16U);
vector<Vec3b> colors;
for (int i = 0; i < number; i++) {
Vec3b vec3 = Vec3b(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256));
colors.push_back(vec3);
}
Mat result = Mat::zeros(rice.size(), img.type());
int w = result.cols;
int h = result.rows;
for (int i = 1; i < number; i++) {
int center_x = centroids.at<double>(i, 0);
int center_y = centroids.at<double>(i, 1);
int x = stats.at<int>(i, CC_STAT_LEFT);
int y = stats.at<int>(i, CC_STAT_TOP);
int w = stats.at<int>(i, CC_STAT_WIDTH);
int h = stats.at<int>(i, CC_STAT_HEIGHT);
int area = stats.at<int>(i, CC_STAT_AREA);
circle(img, Point(center_x, center_y), 2, Scalar(0, 255, 0), 2, 8, 0);
Rect rect(x, y, w, h);
rectangle(img, rect, colors[i], 1, 8, 0);
putText(img, format("%d", i), Point(center_x, center_y),
FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 255), 1);
cout << "number: " << i << ",area: " << area << endl;
}
imshow("result:", img);
waitKey(0);
结果:
边栏推荐
- Error: No named parameter with the name ‘foregroundColor‘
- [Android kotlin collaboration] use coroutinecontext to realize the retry logic after a network request fails
- torch optimizer小解析
- Markdown编辑器
- Some understandings about 01 backpacker
- C语言中函数指针与指针函数
- 接口间调用为什么要用json、fastjson怎么赋值的、fastjson [email protected]映射关系问题
- Sublime tips
- Basic knowledge of road loss of 3GPP channel model
- Leetcode notes
猜你喜欢
《二》标签
Error: No named parameter with the name ‘foregroundColor‘
使用知云阅读器翻译统计遗传学书籍
[practice leads to truth] is the introduction of import and require really the same as what is said on the Internet
高手勿进!写给初中级程序员以及还在大学修炼的“准程序员”的成长秘籍
How does vscade use the built-in browser?
Vscode automatically adds a semicolon and jumps to the next line
Windows are not cheap things
MySQL数据库(基础篇)
《四》表单
随机推荐
Leetcode longest public prefix
Canteen user dish relationship system (C language course design)
01 machine learning related regulations
全国气象数据/降雨量分布数据/太阳辐射数据/NPP净初级生产力数据/植被覆盖度数据
How to design API interface and realize unified format return?
高数中值定理总结
STM32F103 realize IAP online upgrade application
2.证券投资基金的概述
深入解析Kubebuilder
Flask project uses flask socketio exception: typeerror: function() argument 1 must be code, not str
Ansible报错:“msg“: “Invalid/incorrect password: Permission denied, please try again.“
Factor analysis r practice (with R installation tutorial and code)
U++ game learning notes
Batch normalization (Standardization) processing
为什么很多人对技术债务产生误解
[Yugong series] go teaching course 005 variables in July 2022
Terms used in the Web3 community
sublime使用技巧
ServiceMesh主要解决的三大痛点
If you ask me about R code debugging, I will tell you head, STR, help