当前位置:网站首页>【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);结果:




边栏推荐
- 为什么很多人对技术债务产生误解
- 【问道】编译原理
- JS variable case output user name
- 装饰器基础学习02
- 【736. Lisp 语法解析】
- A line of R code draws the population pyramid
- npm ERR! 400 Bad Request - PUT xxx - “devDependencies“ dep “xx“ is not a valid dependency name
- STM32 system timer flashing LED
- [digital analog] source code of MATLAB allcycles() function (not available before 2021a)
- JS input and output
猜你喜欢

动态生成表格

Pointer and array are input in function to realize reverse order output

LabVIEW在打开一个新的引用,提示内存已满

Monitoring cannot be started after Oracle modifies the computer name

《四》表单

IMS data channel concept of 5g vonr+

Section 1: (3) logic chip process substrate selection

U++4 接口 学习笔记
![[Yugong series] go teaching course 005 variables in July 2022](/img/29/2bb30443e1e418556b5e08932f75b4.png)
[Yugong series] go teaching course 005 variables in July 2022

Markdown编辑器
随机推荐
In depth analysis of kubebuilder
Ansible中的inventory主機清單(預祝你我有數不盡的鮮花和浪漫)
Function pointer and pointer function in C language
np.random.shuffle与np.swapaxis或transpose一起时要慎用
When knative meets webassembly
Error: No named parameter with the name ‘foregroundColor‘
Read of shell internal value command
Why is the salary of test and development so high?
01机器学习相关规定
Using thread class and runnable interface to realize the difference between multithreading
2. Overview of securities investment funds
Canteen user dish relationship system (C language course design)
app内嵌h5---iphone软键盘遮挡输入文字
Markdown editor
LabVIEW在打开一个新的引用,提示内存已满
npm ERR! 400 Bad Request - PUT xxx - “devDependencies“ dep “xx“ is not a valid dependency name
A simple and beautiful regression table is produced in one line of code~
3GPP信道模型路损基础知识
JS 的 try catch finally 中 return 的执行顺序
[736. LISP syntax parsing]