【转】OpenCV对图片中的RotatedRect进行填充
函数名:full_rotated_rect
函数参数: image输入图像,rect希望在图像中填充的RotatedRect,color填充的颜色
主要的思路是:先找到RotatedRect的四个顶点,然后画出外框。再利用四个顶点找出其中平行两边的所有点,对相应的两个点进行连接。
void full_rotated_rect(Mat &image, const RotatedRect &rect, const Scalar &color)
{
CvPoint2D32f point[];
Point pt[];
vector<Point> center1, center2; /*画出外框*/
cvBoxPoints(rect, point);
for (int i = ; i<; i++)
{
pt[i].x = (int)point[i].x;
pt[i].y = (int)point[i].y;
}
line(image, pt[], pt[], color, );
line(image, pt[], pt[], color, );
line(image, pt[], pt[], color, );
line(image, pt[], pt[], color, ); /*填充内部*/
find_all_point(pt[], pt[], center1); /*找出两点间直线上的所有点*/
find_all_point(pt[], pt[], center2);
vector<Point>::iterator itor1 = center1.begin(), itor2 = center2.begin();
while (itor1 != center1.end() && itor2 != center2.end())
{
line(image, *itor1, *itor2, color, ); /*连接对应点*/
itor1++;
itor2++;
} vector<Point>().swap(center1);
vector<Point>().swap(center2);
}
函数名:find_all_point
函数参数:start起始点,end结束点,save保存点的容器
主要思路:递归查找两点的中点,直到两点相同。
void find_all_point(Point start, Point end, vector<Point> &save)
{
if (abs(start.x - end.x) <= && abs(start.y - end.y) <= )
{
save.push_back(start);
return; /*点重复时返回*/
} Point point_center;
point_center.x = (start.x + end.x) / ;
point_center.y = (start.y + end.y) / ;
save.push_back(point_center); /*储存中点*/
find_all_point(start, point_center, save); /*递归*/
find_all_point(point_center, end, save);
}
原图:

填充后:

【转】OpenCV对图片中的RotatedRect进行填充的更多相关文章
- 在图片不被裁剪时opencv绕图片中任意点旋转任意角度
opencv绕图片中任意角度旋转任意角度 最近在做项目需要把把图片绕图片中任意点旋转任意角度,考虑到自己旋转需要编写插值算法,所以想到了用opencv,但是网上都是围绕图片中点旋转任意角度的,都是 ...
- OpenCV学习 物体检测 人脸识别 填充颜色
介绍 OpenCV是开源计算机视觉和机器学习库.包含成千上万优化过的算法.项目地址:http://opencv.org/about.html.官方文档:http://docs.opencv.org/m ...
- zbar+opencv检测图片中的二维码或条形码
zbar本身自带检测二维码条形码功能,这里使用opencv只是做一些简单的读取图片,灰度图片以及显示条形码和二维码时用到一些绘制 // barcode-qrcodescanner.cpp: 定义控制台 ...
- 【python人脸识别】使用opencv识别图片中的人脸
概述: OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库 为什么有OpenCV? 计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种: 1.研究 ...
- opencv python:ROI 与 泛洪填充
提取ROI区域,处理然后放回去: 泛洪填充 测试代码:显示一张图像,鼠标点击之后,会从该点开始进行填充,显示填充后的结果图像 注:二值图像的填充需要使用选项:cv2.FLOODFILL_MASK_ON ...
- Python+OpenCV+图片旋转并用原底色填充新四角
import cv2 from math import fabs, sin, cos, radians import numpy as np from scipy.stats import mode ...
- opencv 检测图片中圆形物体(解决乱线问题)
2018-03-0418:03:12 整体代码如下: def detect_circle_demo (image): # 降噪处理 dst = cv.pyrMeanShiftFiltering(ima ...
- OpenCV探索之路(二十五):制作简易的图像标注小工具
搞图像深度学习的童鞋一定碰过图像数据标注的东西,当我们训练网络时需要训练集数据,但在网上又没有找到自己想要的数据集,这时候就考虑自己制作自己的数据集了,这时就需要对图像进行标注.图像标注是件很枯燥又很 ...
- OpenCV 学习笔记03 drawContours函数
opencv-python 4.0.1 轮廓的绘制或填充. cv2.drawContours(image, contours, contourIdx, color[, thickness[, li ...
随机推荐
- 分别用postman和python做post请求接口功能测试
前几天,在做一个post请求的接口功能测试的时候,发现数据始终无法入库, 认真加仔细检查了请求的url.方式.参数,均没有问题 找到技术确认,原来是需要传json格式数据 在头信息中加上类型,body ...
- 面试 -- fragment生命周期
Android 3.0 (Api 11)引入: Fragment具有重用,易适配(平板和手机之间的)优点: 依赖Activity,生命周期受到Activity的生命周期影响: fragment生命周期 ...
- Jenkins中配置邮件通知实例演示
前言:本文通过安装配置Jenkins实现邮件通知,告知一个C# Git Repo的build成功与否 一.预配条件 在windows上安装Jenkins和它推荐安装的Plugins 创建一个@163. ...
- intent.setFlags方法中的参数值含义
一. intent.setFlags()方法中的参数值含义: 1.FLAG_ACTIVITY_CLEAR_TOP:例如现在的栈情况为:A B C D .D此时通过intent跳转到B,如果这个int ...
- Android 自定义ImageView支持缩放,拖拽,方便复用
今天刚发了一篇关于ImageView的缩放和拖拽的博客,然后我想了下,将他自定义下,方便我们来复用这个imageView,效果我就不多说了,http://blog.csdn.net/xiaanming ...
- [POI2012]BON-Vouchers----你敢模拟吗?
链接:https://www.luogu.org/problemnew/show/P3536 题意: 定义n个数为幸运数字,一共有n批人,设第i批人有x个,则它们会依次取走余下的x的倍数中最小的x个, ...
- [luogu1351][联合权值]
题目地址 https://www.luogu.org/problemnew/show/P1351 题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为 ...
- bug6 项目检出JRE问题(Unbound classpath container: 'JRE System Library [JavaSE-1.7]' in project 'idweb')
项目从SVN检出到工作空间后报了很多错误,其中很明显就是一些jar的问题,没有相关的jar或版本问题,看到最后的错误Unbound classpath Container: 'JRE System L ...
- main方法或者junit单元测试报 类找不到异常
MyEclipse10.7+Maven项目junit单元测试报找不到类异常,附正常编译后的输出设置 1 首先想到的是输出路径错误 一般不是maven工程的项目编译后的.class文件会在/weba ...
- dedecms 5.7 采集目标文章的发布时间 采集后变成当前本地时间
我已经解决了.现在把方法告诉你.都是我自己摸索出来的..虽然我不知道什么意思...下面是步骤: 1:找到 co_export.php然后找到这段代码: else if($itemName == 'pu ...