1. #include "core/core.hpp"
  2. #include "highgui/highgui.hpp"
  3. #include "imgproc/imgproc.hpp"
  4. #include "iostream"
  5. #include "cmath"
  6. using namespace std;
  7. using namespace cv;
  8.  
  9. int main(int argc,char *argv[])
  10. {
  11.  
  12. Mat imageOut=imread(argv[],);
  13. Mat imageSource=imread(argv[],);
  14. Mat image;
  15. blur(imageSource,image,Size(,));
  16. threshold(image,image,,,CV_THRESH_OTSU);
  17.  
  18. //寻找最外层轮廓
  19. vector<vector<Point> > contours;
  20. vector<Vec4i> hierarchy;
  21. findContours(image,contours,hierarchy,RETR_EXTERNAL,CHAIN_APPROX_NONE,Point());
  22. Mat imageContours=Mat::zeros(image.size(),CV_8UC1); //最小外接矩形画布
  23.  
  24. Mat imageTemp=imread("C:\\Users\\Administrator\\Desktop\\Rec\\temp.png",); //读一个大小一样的白图
  25.  
  26. for(int i=; i<contours.size(); i++)
  27. {
  28. //cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl;
  29. //绘制轮廓
  30. drawContours(imageContours,contours,i,Scalar(,,),,,hierarchy);
  31.  
  32. //cout<<"*"<<i<<" "<<contours.size()<<endl;
  33. //绘制轮廓的最小外结矩形
  34. RotatedRect rect=minAreaRect(contours[i]);
  35. Point2f P[];
  36. rect.points(P);
  37. if(!(P[].x==P[].x && P[].x==P[].x && P[].y==P[].y && P[].y==P[].y
  38. && P[].y-P[].y> && P[].x-P[].x> ))
  39. continue;
  40.  
  41. for(int j=; j<=; j++)
  42. {
  43. line(imageSource,P[j],P[(j+)%],Scalar(,,),); //二值图绘线
  44. line(imageOut,P[j],P[(j+)%],Scalar(,,),); //原图绘线
  45. line(imageTemp,P[j],P[(j+)%],Scalar(,,),); //白图
  46. }
  47.  
  48. //system("pause");
  49. }
  50. cout<<"!";
  51. imwrite("C:\\Users\\Administrator\\Desktop\\Rec\\new1.png", imageSource);
  52. imwrite("C:\\Users\\Administrator\\Desktop\\Rec\\new2.png", imageOut);
  53. imwrite("C:\\Users\\Administrator\\Desktop\\Rec\\new3.png", imageTemp);
  54. //imshow("MinAreaRect",imageSource);//
  55. waitKey();
  56. return ;
  57. }

24行 读一个白图目的是生成一个只含有矩形框的图片,不需要可以删掉

这样存在的问题是非连通区域不会合并成一个矩形,下一步需要一个合并算法

Opencv 图片边缘检测和最小外接矩形的更多相关文章

  1. opencv学习之路(26)、轮廓查找与绘制(五)——最小外接矩形

    一.简介 二.轮廓最小外接矩形的绘制 #include "opencv2/opencv.hpp" using namespace cv; void main() { //轮廓最小外 ...

  2. Opencv绘制最小外接矩形、最小外接圆

    Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...

  3. Opencv 最小外接矩形合并拼接

    前一篇画出了最小外接矩形,但是有时候画出来的矩形由于中间像素干扰或者是其他原因矩形框并不是真正想要的 如图1是一个信号的雨图,被矩形框分割成了多个小框: 需要合并矩形框达到的效果: 主要思想: 扫描两 ...

  4. cv2.minAreaRect() 生成最小外接矩形

    简介   使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是所要求最小外接矩形的点集数组或向量,这个点集不定个数.   cv2 ...

  5. BZOJ 1185: [HNOI2007]最小矩形覆盖-旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标-备忘板子

    来源:旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标 BZOJ又崩了,直接贴一下人家的代码. 代码: #include"stdio.h" #include"str ...

  6. opencv轮廓外接矩形

    1.寻找轮廓 api void cv::findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray ...

  7. Opencv 改进的外接矩形合并拼接方法

    上一篇中的方法存在的问题是矩形框不够精确,而且效果不能达到要求 这里使用凸包检测的方法,并将原来膨胀系数由20缩小到5,达到了更好的效果 效果图: 效果图: 代码: #include <open ...

  8. OpenCV—Python 轮廓检测 绘出矩形框(findContours\ boundingRect\rectangle

    千万注意opencv的轮廓检测和边缘检测是两码事 本文链接:https://blog.csdn.net/wsp_1138886114/article/details/82945328 1 获取轮廓 O ...

  9. OpenCV 求外接矩形以及旋转角度

    程序没有写完整,大概功能就是实现了,希望大家分享学习,把他改对 // FindRotation-angle.cpp : 定义控制台应用程序的入口点. // // findContours.cpp : ...

随机推荐

  1. [每日App一]QQ主题要逆天!轻轻松松月入30万!

    听从吾师秦刚(微信或QQ:1111884)酋长的建议,谋哥(微信viyi88)我开始新的征程,每日更新一篇干货文章(要坚持啊!否则被酋长鄙视了). 好了,废话不多说,今天我给大家揭秘一个你从来想也木有 ...

  2. 安装python包

    开始--cmd pip install pymongo 直到最后给出提示successfull install pymongo-**(版本号,最新的)

  3. javaScript流程控制与函数

    流程控制 1.1 条件语句 分支结构 单向分支 if (条件表达式) { code... } <!DOCTYPE html> <html> <head> <m ...

  4. iis上的反向代理

    阅读文章: IIS上的反向代理 ARR(Application Request Routing)

  5. Android强制更新

    代码改变世界 Android版本强制更新 package com.lianpos.util; import android.content.Context; import android.conten ...

  6. 【Luogu】P3159交换棋子(超出我能力范围的费用流)

    题目链接 明显超出我能力范围. 只放题解. 再放代码. #include<cstring> #include<algorithm> #include<cstdio> ...

  7. BZOJ1227 [SDOI2009]虔诚的墓主人 【树状数组】

    题目 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地.为 ...

  8. zygote的分裂

    1 zygote的分裂 前面已经讲了zygote分裂出了长子system_server,然后SS(system_server)就通过initAndLoop进行消息循环处理了.那么谁会向zygote发送 ...

  9. charles 抓包工具破解方法

    在线破解地址: https://www.zzzmode.com/mytools/charles/ 之后将下载的jar包替换  charles.app ->右键显示包内容 ->content ...

  10. Linux System Programming 学习笔记(七) 线程

    1. Threading is the creation and management of multiple units of execution within a single process 二 ...