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

用SOEM库搞定汇川SV660N伺服电机:一个Linux C程序员的EtherCAT实战笔记

本文详细介绍了如何在Linux系统下使用SOEM库驱动汇川SV660N伺服电机,包括环境搭建、EtherCAT从站设备识别、PDO映射配置、状态机切换与运动控制等关键步骤。通过实战代码示例和常见问题排查指南,帮助开发者快速掌握工业自动化中的EtherCAT通信技术,实现对伺服电机的精准控制。

weixin_29185199的博客 426

图像旋转及坐标点的对应

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

x2017x的博客 5431

CVPR 2027 投稿规划:基于近3年录用率与截稿周期的5步时间管理法

本文为计算机视觉研究者提供CVPR 2027投稿的完整规划指南,基于近三年录用率与截稿周期数据,提出五步时间管理法。涵盖选题策略、实验设计、论文写作、同行评审到最终提交的全流程优化,特别针对CVPR日益激烈的竞争环境(2024年投稿量达11532篇,录取率仅23.6%)提供实用解决方案,帮助研究者提升投稿成功率。

weixin_34079177的博客 1169

《ATF(TF-A)专题精讲》目录——146篇,完整覆盖整个ATF的官方文档

本文摘要介绍了Trusted Firmware-A (TF-A)项目的技术文档体系。主要内容包括:项目概述、组件解析(如ARM RAS/RME/CCA等安全技术)、系统设计(启动流程、中断管理、信任链等)、开发指南(构建环境、移植策略)、性能分析、平台支持(涵盖NXP、Marvell、Xilinx等主流芯片厂商)、开发流程规范以及安全通告(CVE漏洞分析)。文档体系全面覆盖了ARM安全固件的技术实现、硬件适配和开发实践,为开发者提供了从理论到实践的完整参考。

Linux内核架构师 1115

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

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

GarfieldEr007的专栏 1947

智能水下机器人设计: 基于MATLAB的水下机器人动力学建模和控制系统设计,包括水下环境感知、路径规划和任务执行等

智能水下机器人是指能够在水下自主完成各种任务的机器人,例如探测、勘察、救援等。它具有广阔的应用前景,可用于海洋环境监测、水下考古、海上作业等领域。基于MATLAB的水下机器人设计可以为科研人员和工程师提供强大的建模和仿真工具,帮助他们设计更智能、更高效的水下机器人。智能水下机器人是未来海洋科技发展的重要方向,它将为海洋科学研究、水下考古和海上作业等领域带来新的机遇。MATLAB是一种功能强大的数学和科学计算软件,它可以为智能水下机器人设计提供强大的工具和支持。

走向CTO的路上... 965

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

opencv3编程入门

m0_50127633的博客 2330

强化学习优化多目标冲突推理的决策过程设计

1. 背景介绍 强化学习(Reinforcement Learning,RL)作为机器学习的一个重要分支,近年来在计算机科学和人工智能领域取得了显著的进展。其核心思想是通过试错来学习最优策略,从而在复杂的环境中实现目标。然而,在多目标冲突推理(Multi-Objective Conflict Reasoning,MOCR)问题上,强化学习面临着诸多挑

AI天才研究院 1516

【数据同化第一期】基本概念介绍

【数据同化第一期】基本概念介绍

WW、forever的博客 1906

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

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

m0_50127633的博客 1626

把 ABAP ALV 做成可点、可改、可保存:Interactive Editable ALV Grid 的一套落地打法

文章摘要(148字): SAP ALV报表开发中,交互式可编辑网格的实用方案需解决三个核心问题:数据展示、交互下钻与编辑保存。本文以SCARR航空公司和SFLIGHT航班数据为例,演示如何实现双击主列表下钻明细、动态切换编辑模式、精确保存修改的技术路线。关键点包括:通过PF-STATUS添加业务按钮、使用CHECK_CHANGED_DATA同步前端修改、保护关键字段避免误操作,以及变更数据的审计跟踪方法。该方案适用于SAP GUI环境下的快速业务调整需求,相比Fiori开发具有更高的实施效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 232

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

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

Taily老段的专栏 1336

ICC2 user guide(二)Placement and Optimization

ICC2 place阶段user guide

m0_61544122的博客 9228

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

saiofo的博客 1296

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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、付费专栏及课程。

余额充值