opencv 旋转矩形的提取

Major_Tom_F 2017-11-29 04:16:28
opencv 怎么将旋转的矩形提取出来啊?下面是部分代码
因为图片中有旋转的矩形,想用RotatedRect 检测出包围的最小外接矩形,但是在通过ROI提取的时候不行,因为不是Rec类型的。请问这个问题怎么解决?最好就简单的配合下面代码展开,非常感谢!!

for(int i=0; i<contours.size();i++)
{

RotatedRect rect=minAreaRect(contours[i]); //RotatedRect
Point2f P[4];
rect.points(P);
for(int j=0;j<=3;j++)
{
line(imgSrc,P[j],P[(j+1)%4],Scalar(255),1); //这个地方通过画线得到的外接矩形就是想要的区域
}
Rect bRect = rect.boundingRect(); //
rectangle(imgSrc, bRect, Scalar(128));

roi[i]=imgSrc(rect);
}
...全文
1152 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-11-30
  • 打赏
  • 举报
回复 1
WarpAffine 对图像做仿射变换 void cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CvScalar fillval=cvScalarAll(0) ); src 输入图像. dst 输出图像. map_matrix 2×3 变换矩阵 flags 插值方法和以下开关选项的组合: CV_WARP_FILL_OUTLIERS - 填充所有输出图像的象素。如果部分象素落在输入图像的边界外,那么它们的值设定为 fillval. CV_WARP_INVERSE_MAP - 指定 map_matrix 是输出图像到输入图像的反变换,因此可以直接用来做象素插值。否则, 函数从 map_matrix 得到反变换。 fillval 用来填充边界外面的值 函数 cvWarpAffine 利用下面指定的矩阵变换输入图像: 如果没有指定 CV_WARP_INVERSE_MAP , , 否则, 函数与 cvGetQuadrangleSubPix 类似,但是不完全相同。 cvWarpAffine 要求输入和输出图像具有同样的数据类型,有更大的资源开销(因此对小图像不太合适)而且输出图像的部分可以保留不变。而 cvGetQuadrangleSubPix 可以精确地从8位图像中提取四边形到浮点数缓存区中,具有比较小的系统开销,而且总是全部改变输出图像的内容。 要变换稀疏矩阵,使用 cxcore 中的函数 cvTransform 。
Major_Tom_F 2017-11-30
  • 打赏
  • 举报
回复
引用 2 楼 zhangli00 的回复:
RotateRect有个成员angle,是这个矩形旋转的角度,根据这个角度进行仿射变换,就是上面赵老师说的那个,就可以旋转摆正了,再来提取roi就可以了,不过注意,RotateRect是C++里面的对象,赵老师给的cvWarpAffine是C里面的方法,你应该用cv::WarpAffine或者把RotateRect换成C里面对应的对象,不记得叫什么了,反正名字差别很大
非常感谢!是这样的,就是一个图片中有这些倾斜的文字,我用寻找轮廓能检测提取,可是矩形是正的,我就想用minAreaRect这个方法。您说的得到角度然后旋转,我试一直是整个图旋转,我没办法让我想要的单个文字旋转。还请继续赐教。
csulizhang 2017-11-30
  • 打赏
  • 举报
回复
RotateRect有个成员angle,是这个矩形旋转的角度,根据这个角度进行仿射变换,就是上面赵老师说的那个,就可以旋转摆正了,再来提取roi就可以了,不过注意,RotateRect是C++里面的对象,赵老师给的cvWarpAffine是C里面的方法,你应该用cv::WarpAffine或者把RotateRect换成C里面对应的对象,不记得叫什么了,反正名字差别很大
本书针的读者是高校学生,科研工作者,图像处理爱好者。对于这些 人群,他们往往是带着具体的问题,在苦苦寻找解决方案。为了一个小问 题就让他们去学习 C++ 这么深奥的语言几乎是不可能的。而 Python 的悄 然兴起给他们带来的希望,如果说 C++ 是 tex 的话,那 Python 的易用性 相当于 word。他们可以很快的看懂本书的所有代码,并可以学着使用它们 来解决自己的问题,同时也能拓展自己的视野。别人经常说 Python 不够 快,但是对于上面的这些读者,我相信这不是问题,现在我们日常使用的 PC 机已经无比强大了,而且绝大多数情况下不会用到实时处理,更不会在 嵌入式设备上使用。因此这不是问题。 本书目录: 目录 I 走进 OpenCV 10 1 关于 OpenCV-Python 教程 10 2 在 Windows 上安装 OpenCV-Python 11 3 在 Fedora 上安装 OpenCV-Python 12 II OpenCV 中的 Gui 特性 13 4 图片 13 4.1 读入图像 4.2 显示图像 4.3 保存图像 4.4 总结一下 5 视频 5.1 用摄像头捕获视频 5.2 从文件中播放视频 5.3 保存视频 6 OpenCV 中的绘图函数 6.1 画线 6.2 画矩形 6.3 画圆 6.4 画椭圆 6.5 画多边形 6.6 在图片上添加文字 7 把鼠标当画笔 7.1 简单演示 7.2 高级一点的示例 8 用滑动条做调色板 8.1 代码示例 III 核心操作 9 图像的基础操作 9.1 获取并修改像素值 9.2 获取图像属性 9.3 图像 ROI 9.4 拆分及合并图像通道 9.5 为图像扩边(填充) 10图像上的算术运算 10.1图像加法 10.2图像混合 10.3按位运算 11程序性能检测及优化 11.1使用 OpenCV 检测程序效率 11.2OpenCV 中的默认优化 11.3在 IPython 中检测程序效率 11.4更多 IPython 的魔法命令 11.5效率优化技术 12OpenCV 中的数学工具 IV OpenCV 中的图像处理 13颜色空间转换 54 13.1转换颜色空间 13.2物体跟踪 13.3怎样找到要跟踪对象的 HSV 值? 14几何变换 14.1扩展缩放 14.2平移 14.3旋转 14.4仿射变换 14.5透视变换 15图像阈值 15.1简单阈值 15.2自适应阈值 15.3Otsu’s 二值化 15.4Otsu’s 二值化是如何工作的? 16图像平滑 16.1平均 16.2高斯模糊 16.3中值模糊 16.4双边滤波 17形态学转换 17.1腐蚀 17.2膨胀 17.3开运算 17.4闭运算 17.5形态学梯度 17.6礼帽 17.7黑帽 17.8形态学操作之间的关系 18图像梯度 18.1Sobel 算子和 Scharr 算子 87 18.2Laplacian 算子 19Canny 边缘检测 19.1原理 19.1.1噪声去除 19.1.2计算图像梯度 19.1.3非极大值抑制 19.1.4滞后阈值 19.2OpenCV 中的 Canny 边界检测 20图像金字塔 94 20.1原理 21OpenCV 中的轮廓 22直方图 23图像变换 24模板匹配 25Hough 直线变换 26Hough 圆环变换 27分水岭算法图像分割 28使用 GrabCut 算法进行交互式前景提取 29理解图像特征 30Harris 角点检测 31Shi-Tomasi 角点检测 & 适合于跟踪的图像特征 32介绍 SIFT(Scale-Invariant Feature Transform) 33介绍 SURF(Speeded-Up Robust Features) 34角点检测的 FAST 算法 35BRIEF(BinaryRobustIndependentElementaryFeatures) 36.1OpenCV 中的 ORB 算法 37特征匹配 38使用特征匹配和单应性查找对象 39Meanshift 和 Camshift 40.3OpenCV 中的 Lucas-Kanade 光流 41背景减除 238 41.1基础 42摄像机标定 43姿势估计 44对极几何(Epipolar Geometry) 45立体图像中的深度地图 259 45.1基础 46K 近邻(k-Nearest Neighbour ) 47支持向量机 48K 值聚类 49图像去噪 50图像修补 51使用 Haar 分类器进行面部检测

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧