OpenCV对图像进行切边

article/2025/8/22 21:36:27

1、概述

  案例:使用OpenCV对旋转图片及正常图片进行切边。

  A:对正常图片切边的步骤

    1.加载图像

    2.对图像进行灰度化

    3.边缘检测

    4.轮廓发现

    5.找出符合目标的最大外接矩形,并使用矩形的四个坐标点绘制线

    6.根据找到Rect在原图上切除ROI区域

    7.显示ROI区域

  B:对旋转图像切边的步骤

    1.加载原图

    2.对图像进行灰度化

    3.边缘检测

    4.轮廓发现

    5.找出图像旋转角度(a.找出旋转矩形的最大宽和最大高 b.找出这个目标矩形的旋转角度及旋转矩形。c.把此矩形绘制出来)

    6.根据图片中心点及旋转角度,利用getRotationMatrix2D制作目标旋转Mat

    7.利用wrapAffine+第6步的旋转矩阵实现最终的旋转

    8.此时的图片为正确的旋转图片,可以利用“A:对正常图片切边”的步骤来实现图片的切边  

2、代码示例

/*将旋转图片转成正常图片*/void CaseOneEdgeCutting::correctImageAngle(Mat &  target){src = imread(filePath.toStdString().c_str());if(src.empty()){qDebug()<<"加载图片异常";return;}imshow("src",src);//降噪cvtColor(src,gray,COLOR_BGR2GRAY);imshow("gray",gray);//边缘检测Canny(gray,gray,threshold_value,threshold_value*2);imshow("canny",gray);//轮廓发现vector<vector<Point>> contours;vector<Vec4i> hierarchy;findContours(gray,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE);Mat resultImage = Mat::zeros(src.size(),CV_8UC3);float width = 0;float height = 0;RNG rng(12345);float degree = 0;for(size_t t  =0;t<contours.size();t++){//找到角度RotatedRect minRect = minAreaRect(contours[t]);degree = abs(minRect.angle);if(degree>0){width = max(width,minRect.size.width);height = max(height,minRect.size.height);}}for(size_t t = 0;t<contours.size();t++){RotatedRect minRect = minAreaRect(contours[t]);if (width == minRect.size.width && height == minRect.size.height) {degree = minRect.angle;qDebug()<<"degree:"<<degree;Point2f pts[4];minRect.points(pts);Scalar color = Scalar(0,0,255);for(int i=0;i<4;i++){line(resultImage,pts[i], pts[(i + 1)%4], color, 2, 8, 0);}}}imshow("result1",resultImage);Point2f center(src.cols/2,src.rows/2);//图片中心点Mat degreeRoi = getRotationMatrix2D(center,-degree,1);warpAffine(src,target,degreeRoi,src.size(),INTER_LINEAR, 0, Scalar(255, 255, 255));imshow("dst",target);}
/*正常图片找到ROI区域*/
void CaseOneEdgeCutting::findEdgeCuttingROIImage(Mat &target){Mat srcTarget = target.clone();//降噪cvtColor(target,target,COLOR_BGR2GRAY);//边缘检测Canny(target,target,threshold_value,threshold_value*2);imshow("target",target);//轮廓发现vector<vector<Point>> contours;vector<Vec4i> hierarchy;findContours(target,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE);Mat resultImage = Mat::zeros(src.size(),CV_8UC3);float width = target.cols*0.5;float height = target.rows*0.5;RNG rng(12345);Rect box;for(size_t t = 0;t<contours.size();t++){RotatedRect minRect = minAreaRect(contours[t]);if(minRect.size.width>width&&minRect.size.height>height&&minRect.size.width<(src.cols-60)){qDebug()<<"执行到了这里";Point2f pts[4];minRect.points(pts);box = minRect.boundingRect();Scalar color = Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));for(int i=0;i<4;i++){line(resultImage,pts[i], pts[(i + 1)%4], color, 2, 8, 0);}}}imshow("result2",resultImage);//    //绘制roi区域Mat roiImage = srcTarget(box);imshow("roiImage",roiImage);
}

3、图片示例

 本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓


http://chatgpt.dhexx.cn/article/ZVSJ5KxN.shtml

相关文章

双曲正割matlab求解

&#xff0c;取N305&#xff0c;且x在区间内按照5等分取值。 matlab中对于双曲正割函数可以直接用sech求解&#xff0c;自己编代码的过程永远无法逃避&#xff0c;&#xff0c;因为这个有现成的&#xff0c;那个可能没有&#xff0c;遇到棘手复杂的任务&#xff0c;全靠现成调包…

MATLAB:图像裁切(imcrop函数)

对图像进行裁切可用imcrop函数&#xff0c;实现过程如下&#xff1a; close all; %关闭当前所有图形窗口&#xff0c;清空工作空间变量&#xff0c;清除工作空间所有变量 clear all; clc; [A,map]imread(peppers.png); %读入图像 rect[75 68 130 112]; …

matlab关于图像切割的一些总结:imcrop,getrect,ndgrid,函数

之前查看这么多人写的博客&#xff0c;乱七八糟的&#xff0c;说法不一还有些有错误&#xff0c;误导人。现在记下来&#xff0c;希望给后来人一点指引。 1.imcrop函数 这个函数是 imcrop的第一二元素代表左上角的横纵坐标&#xff0c;第三四元素代表矩行框的宽高 pic imre…

代码实现数学图形之常用函数,幂,对数,指数,正弦,余弦,正切,余切,反正弦,反余弦,反正切,反余切,双曲正弦,双曲余弦,双曲正切,双曲余切,正割函数,余割函数,双曲正割,双曲正割.

(1)幂函数 X的N次幂. 按 CtrlC 复制代码 按 CtrlC 复制代码 脚本代码中X,N都为变量,两个变量会生成一个二维数据,得到一个平面图形.pow_sign是一个保留正负号的pow函数,其C实现为: static float yf_pow_sign(float a, float b) {float s yf_sign(a);a ::fabsf(a);if (…

几何画板如何绘制动态正切函数图像

几何学中必学内容包括三角函数&#xff0c;而三角函数又包括正弦函数、余弦函数、正切函数和余切函数。在黑板上很难准确画出这些三角函数&#xff0c;现在有了几何画板&#xff0c;可以快速而准备的构造出三角函数&#xff0c;下面就给大家介绍在几何画板中动态绘制正切函数图…

mean shift 图像分割(二)

Reference: [1] Mean shift: A robust approach toward feature space analysis, PAMI, 2002 [2] mean shift,非常好的ppt &#xff0c;百度文库链接 [3] Pattern Recognition and Machine Learning, Bishop, 2006&#xff0c;Sec 2.5 [4] Computer Vision Algorithms and App…

GrabCut in One Cut(基于图割算法grabcut的一次快速图像分割的OpenCV实现)----目前效果最好的图割

&#xfeff;&#xfeff; One cut in grabcut&#xff08;grabcut算法的非迭代实现&#xff1f;&#xff09; 本文针对交互式图像分割中的图割算法&#xff0c;主要想翻译一篇英文文献。不足之处请大家指正。 这是博主近期看到的效果最好&#xff0c;实现最简单&#xff0c;运…

mean shift 图像分割 (一)

mean shift 图像分割 Reference: [1] Mean shift: A robust approach toward feature space analysis, PAMI, 2002 [2] mean shift,非常好的ppt &#xff0c;百度文库链接 [3] Pattern Recognition and Machine Learning, Bishop, 2006&#xff0c;Sec 2.5 [4] Computer Vision…

【图像处理】图像分割之(一~四)GraphCut,GrabCut函数使用和源码解读(OpenCV)

图像分割之&#xff08;一&#xff09;概述 http://blog.csdn.net/zouxy09 所谓图像分割指的是根据灰度、颜色、纹理和形状等特征把图像划分成若干互不交迭的区域&#xff0c;并使这些特征在同一区域内呈现出相似性&#xff0c;而在不同区域间呈现出明显的差异性。我们先对目前…

Mac 安装使用 OpenCV 图像处理神器

大家好&#xff0c;我是青空。 最近在折腾图像处理相关的事情&#xff0c;今天就给大家分享一下&#xff0c;Mac 上如何安装和使用 OpenCV。 安装 方法一 使用homebrew安装 其实 Mac 上安装 OpenCV 很简单&#xff0c;一个命令行就能搞定。 brew install opencv等待完成即…

sec和asec--正割和反正割函数

【功能简介】求变量的正割和反正割。 【语法格式】 1&#xff0e;Ysec (X) 计算X的正割&#xff0c;sec(x)1/cos(x)。X可以为向量、矩阵或多维数组&#xff0c;X中的元素可以为复数&#xff0c;所有表示角度的变量都采用弧度来表示。 2&#xff0e;Yasec (X) 计算X的反正割。对…

Graph Cut(图割算法)

转载自&#xff1a;http://blog.csdn.net/zouxy09/article/details/8532111 Graph cuts是一种十分有用和流行的能量优化算法&#xff0c;在计算机视觉领域普遍应用于前背景分割&#xff08;Image segmentation&#xff09;、立体视觉&#xff08;stereo vision&#xff09;、抠…

sech和asech--双曲正割和反双曲正割函数

【功能简介】求变量的双曲正割和反双曲正割。 【语法格式】 1&#xff0e;Ysech(X) 计算X的双曲正割&#xff0c;sech(x)1/cosh(x)。X可以为向量、矩阵或多维数组&#xff0c;X中的元素可以为复数&#xff0c;所有表示角度的变量都采用弧度来表示。 2&#xff0e;Yasech (X) 计…

三角函数中的正弦、余弦、正切、余切、正割、余割函数性质及常用公式

三角函数 三角函数包括正弦、余弦、正切、余切、正割、余割函数 0 基础知识 正弦&#xff08;Sine&#xff09;&#xff1a;sin A CB/CA 余弦&#xff08;Cosine&#xff09; &#xff1a;cos A AB/CA 正切&#xff08;Tangent&#xff09;&#xff1a;tan A CB/BA 余切&a…

数学 三角函数 sin 正弦、cos 余弦、tan 正切、cot 余切、sec 正割、csc 余割 简介

目录 图解定义 文字定义 三角函数诱导公式 1.三角函数诱导公式记忆方法 2.三角函数诱导公式 诱导公式一&#xff1a;终边相同的角的同一三角函数的值相等 诱导公式二&#xff1a;πα的三角函数值与α的三角函数值之间的关系 诱导公式三&#xff1a;任意角α与-α的三角…

sinx、cscx、cosx、secx以及tanx、cotx图像详解

今天在复习三角函数一章中对正切正割等图像感觉比较有意思&#xff0c;仔细梳理了以下内容&#xff1a; sin&#xff1a;sine cos&#xff1a;cosine sec&#xff1a;secant csc&#xff1a;cosecant 首先明确定义&#xff1a;让我们解释一下sec(x)和cos(x)之间的关系。sec(x)是…

正割函数(sec)

1. 定义 正割与余弦互为倒数&#xff0c;余割与正弦互为倒数。即&#xff1a; ⎧⎩⎨⎪⎪⎪⎪secθ1cosθcscθ1sinθ \left\{ \begin{split}\secθ=\frac1{\cosθ} \\\cscθ=\frac1{\sinθ} \end{split} \right.也即在几何上&#xff0c;设 △ABC &#xff0c;∠C90&#xff…

printf 输出格式、域宽

printf: 函数原型:int printf("格式控制串"&#xff0c;输出表); 返回值&#xff1a;成功则返回输出的字节数&#xff08;按终端统计&#xff09; 格式控制符: %d ---- 有符号的十进制整型数 %u ---- 无符号的十进制整型数 %hd --- short …

C语言之printf输出各种格式

基础的东西总是很容易忘&#xff0c;要经常回顾&#xff1a; printf函数调用的一般形式为&#xff1a; printf(“格式控制字符串”, 输出表列) 其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串&#xf…

C语言scanf怎么输入字母,C语言scanf输入格式printf输出格式

1. 转化说明符 %a(%A)浮点数,十六进制数字和p-(P-)表示法(C99)%c个字符 %d个有符号十进制整数 %f浮点数(包括浮点数和doulbe)%e(%E)浮点指数输出[e-(E-)表示法]%g(%G)浮点数不显示无意义的零“ 0”“ %i有符号十进制整数(与%d相同)%u无符号十进制整数 %o八进制整…