OpenCV imgproc组件之图像变换

《OpenCV3编程入门》目录 第一部分 快速上手OpenCV 1 第1章 邂逅OpenCV 3 1.1 OpenCV周边概念认知 4 1.1.1 图像处理、计算机视觉与OpenCV4 1.1.2 OpenCV概述 4 1.1.3 起源及发展 5 1.1.4 应用概述 6 1.2 OpenCV基本架构分析 7 1.3 OpenCV3带来了什么 11 1.3.1 项目架构的改变 11 1.3.2 将OpenCV2代码升级到OpenCV3报错时的一些策略 12 1.4 OpenCV的下载、安装与配置 14 1.4.1 预准备:下载和安装集成开 阅读详情

该部分主要包括边缘检测、霍夫变换、重映射、仿射变换和直方图均衡化几种操作,下面用具体例子分别介绍图像变换函数的使用。


#include<iostream>
#include<opencv2\opencv.hpp>
#include<vector>
using namespace std;
enum EdgeType
{
	CANNY = 0,
	SOBEL,
	LAPLACIAN,
	SCHARR
};
//边缘检测
bool edgeFind(cv::Mat &src, cv::Mat &dst, EdgeType type = CANNY)
{
	cv::Mat edge,edge_x,edge_y;
	edge = src.clone();
	//cv::cvtColor(src, edge, CV_RGB2GRAY);
	cv::cvtColor(src, edge_x, CV_RGB2GRAY);
	cv::cvtColor(src, edge_y, CV_RGB2GRAY);
	switch (type)
	{
	case CANNY:
		cv::Canny(edge, edge, 40, 100, 3); break;
	case SOBEL:
		cv::Sobel(edge, edge_x, edge.depth(), 1, 0, 3);
		cv::Sobel(edge, edge_y, edge.depth(), 0, 1, 3);
		cv::convertScaleAbs(edge_x, edge_x); cv::convertScaleAbs(edge_y, edge_y);
		edge = edge_x + edge_y; break;
	case LAPLACIAN:
		cv::Laplacian(edge, edge, edge.depth(), 3, 1, 0); break;
	case SCHARR:
		cv::Scharr(edge, edge_x, edge.depth(), 1, 0, 3); 
		cv::Scharr(edge, edge_y, edge.depth(), 0, 1, 3);
		cv::convertScaleAbs(edge_x, edge_x); cv::convertScaleAbs(edge_y, edge_y);
		edge = edge_x + edge_y; break;
	}
	cv::imshow("edge", edge);
	dst = cv::Scalar::all(0);
	src.copyTo(dst, edge);
	
	return true;
}

bool houghChange(cv::Mat &src, cv::Mat &dst)
{
	vector<cv::Vec2f> lines;
	cv::Mat src1;
	cv::Canny(src, src1,10,50);
	//cv::cvtColor(src1, src1, CV_GRAY2BGR);
	HoughLines(src1, lines, 1, 3.14 / 180, 150); dst.create(src.size(),src.type());
	for (int i = 0; i < lines.size(); i++)
	{
		float rho = lines[i][0], theta = lines[i][1];
		cv::Point pt1, pt2;
		double a = cos(theta), b = sin(theta);
		double x0 = a*rho, y0 = b*rho;
		pt1.x = cvRound(x0 + 1000 * (-b));
		pt1.y = cvRound(y0 + 1000 * (a));
		pt2.x = cvRound(x0 - 1000 * (-b));
		pt1.y = cvRound(y0 - 1000 * (a));
		line(dst, pt1, pt2, cv::Scalar(55, 100, 195), 1);
	}
	return true;
}

bool remap(cv::Mat &src, cv::Mat &dst)
{
	cv::Mat map_x, map_y;
	dst.create(src.size(), src.type());
	map_x.create(src.size(), CV_32FC1);
	map_y.create(src.size(), CV_32FC1);
	for (int j = 0; j < src.rows; j++)
	for (int i = 0; i < src.cols; i++)
	{
		map_x.at<float>(j, i) = static_cast<float>(i);
		map_y.at<float>(j, i) = static_cast<float>(src.rows - j);
	}
	cv::remap(src, dst, map_x, map_y,CV_INTER_LINEAR);
	return true;
}

void affineTransformation(cv::Mat &src, cv::Mat &dst)
{
//	cv::flip(src, dst, 0);//参数3==0垂直翻转(沿X轴翻转),参数3>0水平翻转(沿Y轴翻转),参数3<0水平垂直翻转(先沿X轴翻转,再沿Y轴翻转,等价于旋转180°
	cv::Point center = cv::Point(src.cols / 2, src.rows / 2);
	double angle = 30;
	double scale = 0.8;
	cv::Mat rotMat(2, 3, CV_32FC1);
	rotMat = cv::getRotationMatrix2D(center, angle, scale);
	cv::warpAffine(src, dst, rotMat, dst.size());
}

int main()
{
	
	cv::Mat src = cv::imread("D:\\OpenCVprivate\\5.jpg");
	cv::Mat morphDst, resizeDst, floodDst, filterDst, thsDst, edgeDst, eqDst, houghDst, affineDst, remapDst;
//	cv::imshow("原图", src);	

	edgeFind(src, edgeDst);//边缘检测
	cv::imshow("edgeDst", edgeDst);

	houghChange(src, houghDst);//霍夫变换
	cv::imshow("houghDst", houghDst);

	affineTransformation(src, affineDst);//仿射变换
	cv::imshow("affineDst", affineDst);

	remap(src, remapDst);//重映射
	cv::imshow("remapDst", remapDst);

	cv::cvtColor(src, eqDst, CV_RGB2GRAY);
	cv::equalizeHist(eqDst, eqDst);//直方图均衡化
	cv::imshow("eqDst", eqDst);
	cv::waitKey();
	return 0;
}

OpenCV imgproc模块 imgproc模块是图像处理模块,这个模块包含如下内容: 线性和非线性的图像滤波 图像的几何变换 其他图像转换 直方图相关 结构分析和形状描述 运动分析和对象跟踪 特征检测 目标检测 高级形态学变换: 腐蚀和膨胀是两种最基本的形态学操作。运用这两个基本操作,可以实现更高级的形态学变换。我们主要讲解OpenCV中的morphologyEx函数,它利用基本的膨胀和腐蚀技术,来执行更加高级的形态学变换。 阅读详情

相关推荐

图像旋转任意角度及其后图中点坐标的对应变化

图像中有一个点P, 将图像旋转任意角度(默认旋转点为图像中心)后,求旋转后的图像?求原图中的点P在旋转后图像中的坐标?问题分为2大步去解决。1)得到旋转矩阵.主要是借助于getRotationMatrix2D算子。getRotationMatrix2D得到的矩阵为2行3列。2)计算旋转后图像的新大小,旋转后图像的宽高发生变化。此外,图像的中心位置也发生偏移,需要进行偏移量调整。

thequitesunshine007的博客 1147

imgproc模块—仿射变换

imgproc模块--仿射变换

nnUyi的博客 708

90+个各种疾病相关医疗数据集

含新冠、传染病、医学图像等

2万+

图像旋转及坐标点的对应

void ImgRotate(const Mat &amp;srcImg, Mat &amp;rotatedImg, double degree) { //degree为逆时针旋转的角度 int h = srcImg.rows; int w = srcImg.cols; //求对角线的长度,做一个以对角线为边长的正方形图像 int diaLength = ...

x2017x的博客 5431

双目立体成像(一)双目图片生成点云

利用左右目图片生成点云

qq_62964142的博客 4554

Rocky Linux 9 远程桌面配置全攻略:从零搭建XRDP服务(含防火墙设置)

本文提供了在Rocky Linux 9上从零开始配置XRDP远程桌面服务的完整指南。详细介绍了系统准备、XRDP服务安装、防火墙与SELinux安全设置、多用户性能优化以及多平台客户端连接实测。重点解决了使用Windows远程桌面协议(RDP)连接Rocky Linux时常见的配置难点与安全问题,帮助用户获得稳定高效的图形化远程访问体验。

vodka的博客 650

OpenCV之imgproc 模块. 图像处理(3)霍夫线变换 霍夫圆变换 Remapping 重映射 仿射变换

霍夫线变换 目标 在这个部分您将学习到: 使用OpenCV的以下函数 HoughLines 和 HoughLinesP 来检测图像中的直线. 原理 Note   以下原理的说明来自书籍 学习OpenCV 作者Bradski和Kaehler. 霍夫线变换 霍夫线变换是一种用来寻找直线的方法.是用霍夫线变换之前, 首先要对图像进行边缘检

GarfieldEr007的专栏 1947

宇树G1二次开发资料汇总

宇树科技G1是一款29自由度的商业级人形机器人,配备NVIDIA Jetson Orin NX计算平台和完整SDK生态。本文系统介绍了G1的硬件架构、29个关节配置、传感器外设、双计算单元设计等关键信息,并详细解析了软件生态体系,包括C++/Python SDK、ROS2接口、仿真工具和AI框架。开发者可通过DDS通信实现高层运动控制或底层关节级精确控制,支持快速二次开发。文档提供了网络配置、接口调用示例等实用指南,帮助开发者高效利用该平台进行人形机器人应用开发。

m0_47999117的博客 1325

掌握imgproc组件:opencv-图像处理

opencv3编程入门

m0_50127633的博客 2330

Mamba-YOLOv8深度解析:基于状态空间模型的下一代目标检测架构(含完整代码与实战部署)文末含资料链接!

通过本文的完整指南,您将掌握从理论创新到工程落地的全流程技术细节。立即动手实践,开启目标检测的新纪元!

FJN110的博客 519

【OpenFOAM】-olaFlow-算例10-wavemakerTank

采用 Flap和Piston两种方式的动网格进行造波

ou_no的博客 2169

掌握imgproc组件:opencv-图像变换

第一个参数:输入图像第二个图像:输出的边缘图第三个参数:int类型的ddept,目标图像的深度第四个参数:int类型的ksize,用于计算二阶导数的滤波器孔径尺寸,大小必须为正奇数第五个参数:double类型的scale,计算拉普拉斯值的时候可选的比例因子,有默认值1第六个参数:double类型的delta,表示在结果存入目标图之前可选地delta值Laplacian() 函数其实主要是利用 Sobel算子的运算。

m0_50127633的博客 1626

3D 韩系风格漫剧人设 | GPT-Image2 人设生成【附完整提示词】

宁姚同款清冷剑系美人,极致小巧鹅蛋脸,下颌线紧致纤细流畅,下巴小巧精致收窄,小脸衬得五官格外舒展,韩式水光肌,面部精细水光高光,鼻梁高光、鼻尖高光、面中苹果肌高光、唇珠高光,红棕色长卷发偏分大波浪,垂在一侧肩前,发量蓬松。发量丰厚蓬松有体积感,不贴头皮,几缕碎发自然垂落脸侧修饰脸型,长度过胸及背,发丝柔顺丝滑卷度自然,发尾自然垂落,身穿香槟色缎面挂脖长裙,挂脖设计无袖露肩露背,上半身围裹式荡领胸口垂褶,腰部堆褶收腰,修身直筒包臀裙长度到脚踝,缎面光泽感强垂坠感好,极简剪裁。纯白色背景,3D漫剧写实厚涂风。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 151

【OpenCV】OpenCV3的第六天——imgproc组件之图像变换

imgproc组件:Image Process,即图像处理模块; 图像滤波; 几何变换; 图像转换; 直方图相关; 结构分析和形状描述; 运动分析和对象跟踪; 特征检测; 目标检测;

Taily老段的专栏 1336

基于Simulink的无线充电系统LCC补偿网络建模与控制

本文详细介绍了基于Simulink的无线充电系统LCC补偿网络建模与控制方法。首先分析了LCC补偿网络的恒流输出、软开关实现和抗偏移能力等优势,并对比了不同补偿拓扑特性。随后分步骤讲解了Simulink建模流程,包括LCC主电路构建、关键参数设计、双闭环控制系统实现等核心环节。重点阐述了移相控制策略和软开关验证方法,提供了系统效率计算和抗偏移测试的调试技巧。最后展示了仿真结果,在耦合系数变化20%时,闭环系统仍能保持输出电压稳定在±2%波动范围内。文章还探讨了工程扩展方向,并针对常见问题给出了解决方案,为无

xiaoheshang_123的博客 540

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

2022-5-28:OpenCV入门(八)imgproc组件学习之四——图像变换

边缘检测 滤波 增强 检测 1.canny算子 void Canny(InputArray image,OutputArray edges,double threshold1,double threshold2,int apertureSize=3,bool L2gradient=false) //第一个参数:输入图像;第二个参数:输出的边缘图;第三个参数:第一个滞后性阈值;第四个参数:第二个滞后性阈值;五个参数:Sobel算子的孔径大小;第六个参数:一个计算图像梯度值的标识。 2.Sobel算子

weixin_44465329的博客 410

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java应用OpenCV指南其二:OpenCV组件浅析

在上一章我们成功安装并配置了OpenCV,现在我们可以查看一下解压目录F:\tools\opencv\build\include下的文件,有两个: opencv中包含了过去版本中保留下来的头文件,这里不做介绍。而opencv2中则包含了我们目前主要使用的组件,可以看到其中包含了一个叫做opencv_modules.hpp的hpp文件,打开可以看到里面包含了OpenCV2中所有组件的宏:

saiofo的博客 1296

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OpenCV3编程入门 学习笔记

OpenCV3编程入门 学习笔记 2018.12.12—2018.12.29 此博客为在看过毛星云版《OpenCV3编程入门》后所总结的一本笔记,可供复习使用。 文章目录 OpenCV3编程入门 学习笔记第一部分 快速上手OpenCV1.5快速上手OpenCV图像处理1.6...

qq153198768的博客 554

【浅墨著作】《OpenCV3编程入门》内容简介&勘误&配套源代码下载

转:http://blog.youkuaiyun.com/poem_qianmo/article/details/44416709 经过近一年的沉淀和总结,《OpenCV3编程入门》一书终于和大家见面了。 最近有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的目录,方便大家更好的了解这本书的内容。其实最近浅墨实在是有些忙,个人独立开发的3D ARPG跨平台游戏App刚刚登陆安卓平台,各

shenhuan111的专栏 1335

OpenCV C++ 图像处理模块 imgproc 详解

在计算机视觉领域,OpenCV 的图像处理模块imgproc(Image Processing)是开发者处理图像数据的核心工具集。它涵盖了从基础的颜色变换、图形绘制,到复杂的轮廓查找与分析等功能。本文将讲解imgproc模块中各个重要功能的使用方法与细节。

2301_76564925的博客 1283

【OpenCV】imgproc 模块:提供图像处理功能

OpenCV的imgproc模块是图像处理的核心组件,提供几何变换、滤波、阈值处理、边缘检测、轮廓分析、霍夫变换等功能。支持多语言接口,通过高效算法实现图像缩放、旋转、滤波去噪、二值化分割、边缘提取等操作。该模块广泛应用于图像预处理、目标检测和分割任务,是计算机视觉工作流的关键环节。

彬彬侠的博客 1301

opencv回顾之路Imgproc Module

这里主要是对opencv几大核心模块函数的理解,并使用官方案例进行了对应的说明,或使用自己的示例代码对相关函数进行测试,加深对背后算法的理解。

xiaochuideai的博客 1415

OpenCV4.3 Java 编程入门:imgproc 模块

文章目录imgproc方法 imgproc imgproc 是 image + process 的缩写,即图像处理,本模块包含很多复杂的图像处理方法,这些方法将图像作为一个整体,图像不仅仅是包含像素的数组,还包含很多的统计特征、形态特征、及物体特征等。 imgproc 模块包含如下内容: 线性和非线性的图像滤波; 图像的几何变换 其他( Miscellaneous )图像转换 直方图相关 结构分析和形状描述 运动分析和对象跟踪 特征检测 目标检测等等 org.opencv.imgproc org.by

抱朴守拙 4336

OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc

imgproc是OpenCV一个比较复杂的lib,我是分开介绍的,之前介绍过了滤波器、直方图、结构分析和形状描述三节,这次介绍一下图像的变换,OpenCV对于图像的变换又可分为几何变换和其他的变换,我这节先介绍一下其他的变换。 这部分的函数包括adaptiveThreshold,对图像进行自适应的阈值操作。 相应的也有更一般常用的阈值操作函数threshold。 这里还是详细介绍一下cvtC

迭代的是人,递归的是神 6万+

【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析

写作当前博文时配套使用OpenCV版本:2.4.8 之前啃了不少OpenCV的官方文档,发现如果了解了一些OpenCV整体的模块架构后,再重点学习自己感兴趣的部分的话,就会有一览众山小的感觉,于是,就决定写出这篇文章,作为启程OpenCV系列博文的第二篇。 至于OpenCV组件结构的研究方法,我们不妨管中窥豹,通过opencv安装路径下include目录里面头文件的分类存放,来一窥OpenCV这些年迅猛发展起来的庞杂组件架构。 我们进入到D:\ProgramFiles\opencv\build\

【浅墨的游戏编程Blog】毛星云(浅墨)的专栏 17万+

OpenCV Imgproc 模块使用指南(Python 版)

Imgproc 模块的核心功能,从基础滤波到复杂特征提取,结合医学、工业、机器人等领域的实战项目,快速构建图像处理解决方案。每个代码示例均可独立运行,方便在实际开发中复用和扩展。模块是 OpenCV 的图像处理核心,提供从基础滤波到高级特征提取的全流程功能。

junjun4561482的专栏 1253
上一篇: OpenCV imgproc组件之 图像处理
chasingMax
博客等级 码龄9年 8粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值