网站首页 > 技术文章 正文
1、概述
案例:输入一张图片找到图片中的一个圆,并标注圆心
实现步骤:
1.输入原图
2.图像图像灰度化
3.图像二值化
4.执行形态学操作去除噪点
5.边缘检测
6.轮廓发现
7.根据面积和纵横比过滤目标轮廓
8.找出圆心并绘制圆心
9.在原图上也绘制圆心并输出
2、代码示例
//【1】载入图像
Mat src = imread(filePath);
Mat src_clone = src.clone();
if(src.empty()){
qDebug()<<"图片为空";
return;
}
imshow("src",src);
//21】转灰度图
Mat gray;
cvtColor(src,gray,COLOR_BGR2GRAY);
//【3】图像二值化
threshold(gray,gray,0,255,THRESH_BINARY|THRESH_OTSU);
imshow("threshold",gray);
//【4】执行形态学开操作去除噪点
Mat kernel = getStructuringElement(MORPH_RECT,Size(20,20),Point(-1,-1));
morphologyEx(gray,gray,MORPH_OPEN,kernel,Point(-1,-1),1);
imshow("morphologyEx",gray);
//【5】边缘检测
Canny(gray,gray,0,255);
imshow("canny",gray);
//【6】轮廓发现
vector<vector<Point>> contours;
vector<Vec4i> her;
findContours(gray,contours,her,RETR_TREE,CHAIN_APPROX_SIMPLE);
Mat resultImage = Mat::zeros(gray.size(),CV_8UC3);
RNG rng(12345);
double area = 0.0;
Point pRadius;
for(size_t i = 0;i<contours.size();i++){
double area = contourArea(contours[i],false);
//【7】根据面积及纵横比过滤轮廓
if(area>200){
Rect rect = boundingRect(contours[i]);
float scale = float(rect.width)/float(rect.height);
if(scale<1.1&&scale>0.9){
drawContours(resultImage,contours,i,Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)),-1);
int x = rect.width/2;
int y = rect.height/2;
//【8】找出圆心并绘制
pRadius=Point(rect.x+x,rect.y+y);
circle(resultImage,pRadius,2,Scalar(0,0,255),2);
}
}
}
imshow("resultImage",resultImage);
//【9】在原图上绘制圆心,这一步要不要都行,因为坐标都找出来了,可以随便标注
circle(src_clone,pRadius,2,Scalar(0,0,255),2);
imshow("src_clone",src_clone);
3、图片示例
猜你喜欢
- 2024-10-12 智能监测:皮带输送系统堵料问题的解决方案
- 2024-10-12 Python-OpenCV 10. 图像边缘算法 opencv边缘识别
- 2024-10-12 Net AI学习笔记系列第五章 net教程
- 2024-10-12 深度学习和神经网络——图像读取和显示
- 2024-10-12 十三句Python搞定找茬游戏 找茬游戏规则
- 2024-10-12 「深度学习」手把手教你用PythonOpenCV物体识别-识别水果
- 2024-10-12 python代码实现OpenCV 轮廓近似原理
- 2024-10-12 分享3个干货满满的Python实战项目,点赞收藏
- 2024-10-12 OpenCV(28)——凸包 opencv轮廓凹凸
- 2024-10-12 基于OpenCV实战:动态物体检测 opencv动态阈值
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)