Opencv 图片边缘检测和最小外接矩形
#include "core/core.hpp"
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"
#include "iostream"
#include "cmath"
using namespace std;
using namespace cv; int main(int argc,char *argv[])
{ Mat imageOut=imread(argv[],);
Mat imageSource=imread(argv[],);
Mat image;
blur(imageSource,image,Size(,));
threshold(image,image,,,CV_THRESH_OTSU); //寻找最外层轮廓
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(image,contours,hierarchy,RETR_EXTERNAL,CHAIN_APPROX_NONE,Point());
Mat imageContours=Mat::zeros(image.size(),CV_8UC1); //最小外接矩形画布 Mat imageTemp=imread("C:\\Users\\Administrator\\Desktop\\Rec\\temp.png",); //读一个大小一样的白图 for(int i=; i<contours.size(); i++)
{
//cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl;
//绘制轮廓
drawContours(imageContours,contours,i,Scalar(,,),,,hierarchy); //cout<<"*"<<i<<" "<<contours.size()<<endl;
//绘制轮廓的最小外结矩形
RotatedRect rect=minAreaRect(contours[i]);
Point2f P[];
rect.points(P);
if(!(P[].x==P[].x && P[].x==P[].x && P[].y==P[].y && P[].y==P[].y
&& P[].y-P[].y> && P[].x-P[].x> ))
continue; for(int j=; j<=; j++)
{
line(imageSource,P[j],P[(j+)%],Scalar(,,),); //二值图绘线
line(imageOut,P[j],P[(j+)%],Scalar(,,),); //原图绘线
line(imageTemp,P[j],P[(j+)%],Scalar(,,),); //白图
} //system("pause");
}
cout<<"!";
imwrite("C:\\Users\\Administrator\\Desktop\\Rec\\new1.png", imageSource);
imwrite("C:\\Users\\Administrator\\Desktop\\Rec\\new2.png", imageOut);
imwrite("C:\\Users\\Administrator\\Desktop\\Rec\\new3.png", imageTemp);
//imshow("MinAreaRect",imageSource);//
waitKey();
return ;
}
24行 读一个白图目的是生成一个只含有矩形框的图片,不需要可以删掉



这样存在的问题是非连通区域不会合并成一个矩形,下一步需要一个合并算法
Opencv 图片边缘检测和最小外接矩形的更多相关文章
- opencv学习之路(26)、轮廓查找与绘制(五)——最小外接矩形
一.简介 二.轮廓最小外接矩形的绘制 #include "opencv2/opencv.hpp" using namespace cv; void main() { //轮廓最小外 ...
- Opencv绘制最小外接矩形、最小外接圆
Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...
- Opencv 最小外接矩形合并拼接
前一篇画出了最小外接矩形,但是有时候画出来的矩形由于中间像素干扰或者是其他原因矩形框并不是真正想要的 如图1是一个信号的雨图,被矩形框分割成了多个小框: 需要合并矩形框达到的效果: 主要思想: 扫描两 ...
- cv2.minAreaRect() 生成最小外接矩形
简介 使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是所要求最小外接矩形的点集数组或向量,这个点集不定个数. cv2 ...
- BZOJ 1185: [HNOI2007]最小矩形覆盖-旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标-备忘板子
来源:旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标 BZOJ又崩了,直接贴一下人家的代码. 代码: #include"stdio.h" #include"str ...
- opencv轮廓外接矩形
1.寻找轮廓 api void cv::findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray ...
- Opencv 改进的外接矩形合并拼接方法
上一篇中的方法存在的问题是矩形框不够精确,而且效果不能达到要求 这里使用凸包检测的方法,并将原来膨胀系数由20缩小到5,达到了更好的效果 效果图: 效果图: 代码: #include <open ...
- OpenCV—Python 轮廓检测 绘出矩形框(findContours\ boundingRect\rectangle
千万注意opencv的轮廓检测和边缘检测是两码事 本文链接:https://blog.csdn.net/wsp_1138886114/article/details/82945328 1 获取轮廓 O ...
- OpenCV 求外接矩形以及旋转角度
程序没有写完整,大概功能就是实现了,希望大家分享学习,把他改对 // FindRotation-angle.cpp : 定义控制台应用程序的入口点. // // findContours.cpp : ...
随机推荐
- 总结:PHP值得注意的几个问题
1.除了变量和常量区分大小写外,其他的标识符不区分大小写(例如关键字,类名,函数名等): 2. >>>是无符号右移,不管第一位是0还是1,右移后前面都是补0: 3.在函数中传递数组, ...
- TOJ4203: Domino Piece
4203: Domino Piece Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 5 ...
- linux 系统时间调整
linux的硬件时间是从COMS中读取的. 系统时间是由操作系统维护的. 先查看时区是否正确 (东八区 +8) #date -R 选择时区: #tzselect 修改了系统时间,还应该跟硬件时间进行同 ...
- Navicat数据库备份还原
Navicat数据库备份包括数据和架构 还原数据库:把备份文件复制到备份文件夹所在位置,还原即可
- 九度oj 题目1356:孩子们的游戏(圆圈中最后剩下的数)
题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈. ...
- Welcome-to-Swift-03字符串和字符(Strings and Characters)
String是例如“hello, world“”,“海贼王” 这样的有序的Character(字符)类型的值的集合,通过String类型来表示. Swift 的String和Character类型提供 ...
- poj 2379 Sum of Consecutive Prime Numbers
...
- [专题总结]数位DP
总结: 1:第i个数符合要求了,所以接下来的数都可以.如果没限制, 那么是有 10i-1 个.如果有限制,那么是 (nowx % 10i-1)+1 . 2:两种状态设置 有设状态d ...
- centos 7安装postgresql10.3
最新版本安装请移步:阿里云服务器 centos 7 安装postgresql 11 一.Postgresql简介 官方网站:https://www.postgresql.org/ 简介参考zhihu文 ...
- Java原来如此-反射机制
在Java运行时环境中,对于任意一个类,能知道这个类有哪些属性和方法.对于任意一个对象,能调用它的任意一个方法.这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射(Reflect ...