iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#如何实现opencv截取旋转矩形区域图像
  • 387
分享到

C#如何实现opencv截取旋转矩形区域图像

2023-06-07 23:06:25 387人浏览 薄情痞子
摘要

本篇内容主要讲解“C#如何实现OpenCV截取旋转矩形区域图像”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#如何实现opencv截取旋转矩形区域图像”吧!前言:最近在工程中需要用到截取Rot

本篇内容主要讲解“C#如何实现OpenCV截取旋转矩形区域图像”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#如何实现opencv截取旋转矩形区域图像”吧!

前言:最近在工程中需要用到截取RotatedRect中的图形,保存为Mat做后续处理。发现opencv文档中没有这个api,最开始想到的方案是将整张图片进行相应的旋转,然后再从中截取正矩形,但是我们要获取的是部分区域,将整张图片进行旋转会造成很多的资源浪费。所以需要自行实现一个旋转矩形的方案。

实现方法

原理是利用向量空间变换,如图

C#如何实现opencv截取旋转矩形区域图像

通过

Point2f[] points=rotatedRect.Points();

可获取RotatedRect四个端点的坐标。先选定一个点为输出Mat左上端点,这里采取的是离原图左上角最近的端点(即x2+y2最小)。然后再选取相邻的2个端点,作向量Vx及Vy。这里可以根据需求来选定Vx和Vy的方向,比如要求输出Mat的Width大于Height,那就选定长的一边为Vx。这里直接选定左上端点到顺时针方向的端点的向量为Vx,即如图所示。

在选定好Vx和Vy后,进行向量空间的变换。设在输出的Mat中任一一个坐标点(i,j),对应在输出Mat中的任一坐标点(x,y)。设左上端点坐标(x0,y0) (即图中点2),

满足:

设目标RotatedRect长宽为width height,有

C#如何实现opencv截取旋转矩形区域图像

然后做一个二重循环,将j从0循环到height,i从0循环到width,就可以得到输出Mat所有像素的信息。
下面为一个截取BGR类型的Mat的RotatedRect的代码

///<Summary>///利用向量运算截取一个RotatedRect区域///</Summary>///<param name="img">类型为CV_U8C3的Mat</param>///<param name="rotatedRect">RotatedRect</param>public static Mat sliceRotetedImg8UC3(Mat img,RotatedRect rotatedRect){ // Rect bounding=rotatedRect.BoundingRect(); Point2f[] points=rotatedRect.Points(); int topLeftIndex=0; double topLeftR=points[0].X*points[0].X+points[0].Y*points[0].Y; for(int i=1;i<4;i++){  double r=points[i].X*points[i].X+points[i].Y*points[i].Y;  if(r<topLeftR){   topLeftIndex=i;   topLeftR=r;  } } double x1=points[(topLeftIndex+1)%4].X-points[topLeftIndex].X,y1=points[(topLeftIndex+1)%4].Y-points[topLeftIndex].Y; double x2=points[(topLeftIndex+3)%4].X-points[topLeftIndex].X,y2=points[(topLeftIndex+3)%4].Y-points[topLeftIndex].Y; double vX1=x1,vY1=y1,vX2=x2,vY2=y2; int width=(int)Math.Sqrt(vX1*vX1+vY1*vY1),height=(int)Math.Sqrt(vX2*vX2+vY2*vY2); Mat ret=new Mat(new Size(width,height),MatType.CV_8UC3); // Console.WriteLine($"width={width},height={height}"); var indexer1=img.GetGenericIndexer<Vec3b>(); var indexer2=ret.GetGenericIndexer<Vec3b>(); for(int j=0;j<ret.Height;j++){  for(int i=0;i<ret.Width;i++){   double kx=(double)i/width,ky=(double)j/height;   int x=(int)(points[topLeftIndex].X+kx*vX1+ky*vX2),y=(int)(points[topLeftIndex].Y+kx*vY1+ky*vY2);   indexer2[j,i]=indexer1[y,x];  } } return ret;}

到此,相信大家对“C#如何实现opencv截取旋转矩形区域图像”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: C#如何实现opencv截取旋转矩形区域图像

本文链接: https://www.lsjlt.com/news/250416.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#如何实现opencv截取旋转矩形区域图像
    本篇内容主要讲解“C#如何实现opencv截取旋转矩形区域图像”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#如何实现opencv截取旋转矩形区域图像”吧!前言:最近在工程中需要用到截取Rot...
    99+
    2023-06-07
  • 使用c++实现OpenCV绘制旋转矩形图形
    目录功能函数测试代码测试效果  功能函数 // 绘制旋转矩形 void DrawRotatedRect(cv::Mat mask,const cv::RotatedRe...
    99+
    2024-04-02
  • android矩形区域内如何实现截图
    在Android中,可以使用以下代码实现在矩形区域内进行截图:1. 首先,我们需要获取屏幕的截图,可以通过以下代码获取整个屏幕的截图...
    99+
    2023-08-24
    android
  • android矩形区域内实现截图
    要在Android设备上实现矩形区域的截图,可以使用以下步骤:1. 创建一个用于显示截图的`ImageView`组件,并将其添加到布...
    99+
    2023-08-23
    Android
  • opencv如何实现图像旋转效果
    小编给大家分享一下opencv如何实现图像旋转效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!图像旋转:在opencv中首先根据旋转角度和中心获取旋转矩阵,然后根据旋转矩阵进行变换参数:实现代码:import ...
    99+
    2023-06-14
  • Python+OpenCV如何实现在图像上绘制矩形
    小编给大家分享一下Python+OpenCV如何实现在图像上绘制矩形,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!代码import copyimport cv2import numpy&nbs...
    99+
    2023-06-29
  • C#如何使用OpenCV剪切图像中的圆形和矩形
    这篇文章主要介绍“C#如何使用OpenCV剪切图像中的圆形和矩形”,在日常操作中,相信很多人在C#如何使用OpenCV剪切图像中的圆形和矩形问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#如何使用OpenC...
    99+
    2023-06-07
  • OpenCV和C++实现图像的翻转(镜像)、平移、旋转、仿射与透视变换
    目录一、翻转(镜像)二、仿射扭曲获取变换矩阵仿射扭曲函数 warpAffine旋转平移三、仿射变换四、透视变换综合示例总结官网教程 一、翻转(镜像) 头文件 quick_opencv...
    99+
    2024-04-02
  • 如何使用OpenCV与JVM实现矩阵处理图像
    这篇文章给大家分享的是有关如何使用OpenCV与JVM实现矩阵处理图像的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。submat(int rowStart, int rowEnd, int colStart, i...
    99+
    2023-06-26
  • C++ opencv如何实现几何图形绘制
    这篇“C++ opencv如何实现几何图形绘制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++ op...
    99+
    2023-06-30
  • python+opencv图像分割如何实现分割不规则ROI区域
    这篇文章将为大家详细讲解有关python+opencv图像分割如何实现分割不规则ROI区域,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python有哪些常用库python常用的库:1.requesuts...
    99+
    2023-06-14
  • Python如何实现简单图像缩放与旋转
    这篇文章主要介绍Python如何实现简单图像缩放与旋转,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 图像缩放1.2. 使用命令import cv2# 缩放def resize(im...
    99+
    2023-06-26
  • C++ OpenCV如何实现图像修复功能
    本篇文章给大家分享的是有关C++ OpenCV如何实现图像修复功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言下面将使用OpenCV C++ 对有瑕疵的图像进行...
    99+
    2023-06-26
  • Vue+Openlayer如何实现图形的拖动和旋转变形效果
    这篇文章主要介绍Vue+Openlayer如何实现图形的拖动和旋转变形效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现效果旋转、拖动图1、实现效果图2、旋转效果图3、左右移动效果 实现步骤vue中引入...
    99+
    2023-06-21
  • Python+OpenCV数字图像处理中如何进行ROI区域的提取
    本篇文章给大家分享的是有关Python+OpenCV数字图像处理中如何进行ROI区域的提取,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、实现原理先通过cv.cvtColor...
    99+
    2023-06-22
  • C++和OpenCV如何实现图像字符化效果
    今天小编给大家分享一下C++和OpenCV如何实现图像字符化效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实现原理图像字...
    99+
    2023-06-30
  • C++ OpenCV如何实现图像双三次插值算法
    本篇内容主要讲解“C++ OpenCV如何实现图像双三次插值算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ OpenCV如何实现图像双三次插值算法”吧!一、图像双三...
    99+
    2023-06-21
  • C++如何实现图像目标区裁剪ImageCropping
    这篇“C++如何实现图像目标区裁剪ImageCropping”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++如何实现图像...
    99+
    2023-07-02
  • c++结合opencv如何实现读取多张图片并显示
    目录方法一方法二方法三方法一 主要函数 void cv::glob(String pattern,std::vector<string>&result,bool ...
    99+
    2022-11-13
    c++结合opencv opencv读取多张图片 opencv图片显示
  • 如何利用C++ OpenCV 实现从投影图像恢复仿射特性
    如何利用C++ OpenCV 实现从投影图像恢复仿射特性,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。原理我们通过相机拍摄的图片存在各种畸变,其中投影畸...
    99+
    2023-06-21
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作