opencv实践::对象的提取
问题描述
真实案例,对图像中对象进行提取,获取这样对象,去掉其它干扰和非目标对象。
解决思路
二值分割 + 形态学处理 +横纵比计算

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h> #define IMAGE_IMAGE "D:/case4.png" using namespace cv;
using namespace std; Mat src, binary, dst;
int main(int argc, char** argv) {
src = imread(IMAGE_IMAGE, IMREAD_GRAYSCALE);
if (src.empty()) {
printf("could not load image...\n");
return -;
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src); // 二值化
threshold(src, binary, , , THRESH_BINARY | THRESH_OTSU);
//imshow("binary image", binary); // 形态学操作 闭
Mat kernel = getStructuringElement(MORPH_RECT, Size(, ), Point(-, -));
morphologyEx(binary, dst, MORPH_CLOSE, kernel, Point(-, -));
//imshow("close image", dst);
// 形态学操作 开
kernel = getStructuringElement(MORPH_RECT, Size(, ), Point(-, -));
morphologyEx(dst, dst, MORPH_OPEN, kernel, Point(-, -));
//imshow("open image", dst); // 轮廓发现
vector<vector<Point>> contours;
vector<Vec4i> hireachy;
findContours(dst, contours, hireachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point()); Mat resultImage = Mat::zeros(src.size(), CV_8UC3);
Point cc;
for (size_t t = ; t < contours.size(); t++) {
// 面积过滤
double area = contourArea(contours[t]);
if (area < ) continue;
// 横纵比过滤
Rect rect = boundingRect(contours[t]);
float ratio = float(rect.width) / float(rect.height); if (ratio < 1.1 && ratio > 0.9) {
drawContours(resultImage, contours, t, Scalar(, , ), -, , Mat(), , Point());
printf("circle area : %f\n", area);
printf("circle length : %f\n", arcLength(contours[t], true));
int x = rect.x + rect.width / ;
int y = rect.y + rect.height / ;
cc = Point(x, y);
circle(resultImage, cc, , Scalar(, , ), , , );
}
}
//imshow("Result", resultImage); Mat circleImage = src.clone();
cvtColor(circleImage, circleImage, COLOR_GRAY2BGR);
circle(circleImage, cc, , Scalar(, , ), , , );
imshow("Final Result", circleImage); waitKey();
return ;
}
opencv实践::对象的提取的更多相关文章
- opencv实践::对象提取与测量
问题描述 照片是来自太空望远镜的星云图像,科学家想知道它的面 积与周长. 解决思路 方法一: 通过二值分割+图像形态学+轮廓提取 #include <opencv2/opencv.hpp> ...
- opencv实践::对象计数
问题描述 真实案例,农业领域经常需要计算对象个数 或者在其它领域拍照自动计数,可以提供效率,减低成本 解决思路 通过二值分割+形态学处理+距离变换+连通区域计算 #include <opencv ...
- GsonWithoutObject 没有对象(脱离对象) 直接提取 ... gson json
GsonWithoutObject 脱离对象, 直接提取 package temp; import tool.FileTool; import com.google.gson.JsonElement; ...
- GsonWithoutObject 没有对象(脱离对象) 直接提取【转】
GsonWithoutObject 没有对象(脱离对象) 直接提取 ... gson json GsonWithoutObject 脱离对象, 直接提取 package temp; import to ...
- 【opencv基础】OpenCV从Mat中提取某些行或列
这两个函数返回的是指向原矩阵内部位置的指针,类似于浅拷贝: code cv::Mat align_mean(cv::Mat mean, cv::Rect facebox, float scaling_ ...
- HOG:从理论到OpenCV实践
(转载请注明出处:http://blog.csdn.net/zhazhiqiang/ 未经允许请勿用于商业用途) 一.理论 1.HOG特征描述子的定义: locally normalised ...
- [OpenCV] 3、直线提取 houghlines
>_<" 发现一个好的链接,是一个讲openCV的网站:http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html > ...
- SVM:从理论到OpenCV实践
(转载请注明出处:http://blog.csdn.net/zhazhiqiang/ 未经允许请勿用于商业用途) 一.理论 参考网友的博客: (1)[理论]支持向量机1: Maximum Marg ...
- 【opencv实践】边缘检测
边缘检测: 一.canny算子 Canny边缘检测根据对信噪比与定位乘积进行测度,得到最优化逼近算子,也就是Canny算子.类似与 LoG 边缘检测方法,也属于先平滑后求导数的方法. 二.canny算 ...
随机推荐
- Android MediaPlayer 基础简介
本文链接: Android MediaPlayer 基础简介 简单介绍MediaPlayer的基本概念,状态,常用的方法与监听器. 什么是MediaPlayer MediaPlayer类可以用来播放音 ...
- 解析 HTTP 请求 header 错误
1.org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误 2.原因:在创建项目名称的时候,文件名不能带有中文,只能 ...
- Spring boot 自定义banner的在线制作
目前工作不是很忙,利用闲暇的时间,在给自己不断地充电,提升自己的技术实力. 目前在做一个基于Spring Boot2.x+webmagic+quartz的爬虫项目[hotDog]https://git ...
- Java 集合转换(数组、List、Set、Map相互转换)
package com.example.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Hash ...
- Nginx 配置Https转发http、 websocket
系统启动Nginx后,报 [emerg] bind() to 0.0.0.0:XXXX failed (13: Permission denied)错误的处理方式,分为两种: 第一种:端口小于1024 ...
- mysql按关键词截取字符串
按关键字截取字符串 :substring_index(被截取字段,关键字,关键字出现的次数) eg:字符串:test.docx:test2.zip substring_index(file_name, ...
- 2019年9月末周java面试总结
不知不觉离职已经2个月了,这周开始投简历找工作,本来也做好了被打击的心理准备了,毕竟这么久没敲代码,也没怎么准备,基本上是属于裸面. 总结一下简历投递情况: 不知道是简历写得太敷衍,还是要求太高,总之 ...
- C# 反射Reflection——反射反射程序员的快乐
一.什么是反射 反射Reflection:System.Reflection,是.Net Framework提供的一个帮助类库,可以读取并使用metadata. 反射是无处不在的,MVC-Asp.Ne ...
- Spring boot 梳理 - @SpringBootConfiguration
@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类, 并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到sprin ...
- vue 条件渲染方式
1.通过class绑定 <div :class="{'div-class': this.align == 'center'}"></div> 对应的css ...