【20160924】GOCVHelper 图像处理部分(2)
2024-10-11 11:07:51
//根据轮廓的面积大小进行选择
vector<VP> selectShapeArea(Mat src,Mat& draw,vector<VP> contours,int minvalue,int maxvalue){
vector<VP> result_contours;
draw = Mat::zeros(src.rows,src.cols,CV_8UC3);
for (int i=0;i<contours.size();i++){
double countour_area = contourArea(contours[i]);
if (countour_area >minvalue && countour_area<maxvalue)
result_contours.push_back(contours[i]);
}
for (int i=0;i<result_contours.size();i++){
int iRandB = rng.uniform(0,255);
int iRandG = rng.uniform(0,255);
int iRandR = rng.uniform(0,255);
Scalar color = Scalar(iRandB,iRandG,iRandR);
drawContours(draw,result_contours,i,color,-1);
char cbuf[100];sprintf_s(cbuf,"%d",i+1);
//寻找最小覆盖圆,求出圆心。使用反色打印轮廓序号
float radius;
cv::Point2f center;
cv::minEnclosingCircle(result_contours[i],center,radius);
putText(draw,cbuf,center, FONT_HERSHEY_PLAIN ,5,Scalar(255-iRandB,255-iRandG,255-iRandR),5);
}
return result_contours;
}
vector<VP> selectShapeArea(vector<VP> contours,int minvalue,int maxvalue)
{
vector<VP> result_contours;
for (int i=0;i<contours.size();i++){
double countour_area = contourArea(contours[i]);
if (countour_area >minvalue && countour_area<maxvalue)
result_contours.push_back(contours[i]);
}
return result_contours;
}
在Halcon中,运用非常广泛的SelectShape的Opencv实现,能够根据轮廓的大小,直接挑选出所需要的部分。我在这个基础上进行了强化,能够把每个轮廓的序号标注出来。并且依然提供draw打印。
最新文章
- java web重定向与转发
- 谈谈怎么实现Oracle数据库分区表
- 校省选赛第一场D题TwoDecks题解
- 【翻译】在Ext JS 5种使用ViewControllers
- Mysql自增主键ID重新排序方法详解
- PHP读取Excel里的文件
- zookeeper C API
- HDU 5556 最大独立集
- C# 调用.exe文件
- 将整数m的各位数字保存到数组A中
- 建立live555海思编码推流服务
- Java并发程序设计(四)JDK并发包之同步控制
- iOS Document Interaction(预览和打开文档) 编程指南
- Javascript 随机数函数 学习之二:产生服从正态分布随机数
- GrowingIO接入SDK简介
- 编程王道,唯&ldquo;慢&rdquo;不破
- cobller安装操作系统
- java中对象和对象的引用
- Idea 02.暴力递归与动态规划(1)
- (转)JAVA-反射机制的使用