OpenCV基础(2)

news/2024/11/20 10:25:29/

1.图像像素与通道操作

1.1.像素算术操作

//加法操作
void cv::add(InputArray src1,InputArray src2,OutputArray dst,InputArray mask=noArray(),int dtype=-1);//减法操作
void cv::subtract(InputArray src1,InputArray src2,OutputArray dst,InputArray mask=noArray(),int dtype=-1);//乘法操作
void cv::multiply(InputArray src1,InputArray src2,OutputArray dst,InputArray mask=noArray(),int dtype=-1);//除法操作
void cv::divide(InputArray src1,InputArray src2,OutputArray dst,InputArray mask=noArray(),int dtype=-1);
  • src1:输入第一张图片
  • src2:输入第二张图片
  • dst:输出图片
  • mask:掩膜层
  • dtype:数据类型

1.2.像素位操作

//位取反操作
void cv::bitwise_not(InputArray src,OutputArray dst,InputArray mask=noArray());//位与
void cv::bitwise_and(InputArray src1,InputArray src2,OutputArray dst,InputArray mask=noArray());//位或
void cv::bitwise_or(InputArray src1,InputArray src2,OutputArray dst,InputArray mask=noArray());//位异或
void cv::bitwise_xor(InputArray src1,InputArray src2,OutputArray dst,InputArray mask=noArray());

1.3.调整图像亮度与对比度

调整图像亮度:

对于RGB图像来说,RGB三个通道的像素值越高,图像亮度越高,越接近白色;反之,RGB三个通道像素值越低,图像亮度越低,越接近黑色。这里我们可以用简单的像素加法和减法操作用于调整RGB图像的亮度

Mat img=Mat::zeros(image.size(),image.type());
img.setTo(Scalar(50,50,50))
Mat lightMat,darkMat;
//亮度增强
add(image,img,lightMat);
//亮度降低
subtract(image,img,darkMat);

调整图像对比度:

图像对比度主要用于描述图像亮度之间的感知差异,对比度越大,图像的每个像素与周围的差异性越大,整个图像的细节越显著,反之亦然。图像乘法或除法操作可分别用于扩大或缩小图像像素之间的差值,从而达到调整图像对比度的目的

Mat img=Mat::zeros(image.size(),CV_32FC3);
img.setTo(Scalar(0.8,0.8,0.8))
Mat lowContrastMat,highContrastMat;
//高对比度
multiply(image,img,lowContrastMat,1.0,CV_8U);
//低对比度
divide(image,img,highContrastMat,1.0,CV_8U);

1.4.图像类型

Mat的数据类型有很多种,而且各种Mat数据类型可以根据需要进行类型转换。imread默认加载的是CV_8UC3类型数据,显示的时候使用imshow即可;但当其数据类型转换为CV_32FC3浮点型数据时,直接通过imshow显示的图像将呈白色,无法正常显示;这是因为imshow对浮点型数据的取值范围时[0~1],所以需要对转换后的图像先除以255,将取值范围[0~255]转换到[0~1],这样图像就可以正常显示了

void cv::Mat::convertTo(OutputArray m, //输出对象int rtype,     //数据类型double alpha=1,//缩放系数double beta=0  //加和
)    

1.5.图像通道

//查询图像通道数
int cv::Mat::channels();//不同通道数目相互切换
void cv::cvtColor(InputArray src,    //输入图像OutputArray dst,   //输出图像int code,          //转换格式int dstCn=0
)//常见的转换格式如下:
//COLOR_BGR2GRAY:三通道转换为单通道(彩色图像转换为灰度图像)
//COLOR_GRAY2BGR:单通道转换为三通道(无法把丢失的色彩转换回来)

1.6.通道操作

//通道分离
void cv::split(const Mat &src,//输入图像Mat *mvbegin   //输出的通道Mat数组,用std::vector<Mat>表示
);//通道合并
void cv::merge(InputOutputArrays mv,//输入的多个单通道数据OutputArray dst      //输出Mat对象
);

2.几何变换

2.1.图像翻转

void flip(InputArray src, OutputArray dst, int flipCode)

  • src 代表 原始图像矩阵
  • dst 代表 变换后的图像矩阵
  • flipCode 代表翻转模式,总共三种(0:垂直方向翻转 ;1:水平方向翻转 ;-1:水平、垂直方向同时翻转)

2.2.图像旋转

Mat getRotationMatrix2D(Point2f center,double angle,double scale);

  • center:旋转的中心点
  • angle:旋转的角度
  • scale:图像缩放因子

2.3.图像缩放

void resize(InputArray src,OutputArray dst,Size dsize,double fx=0,double fy=0,int interpolation=INTER_LINEAR)

  • src:输入图像
  • dst:输出图像
  • dsize:目标图像大小
  • fx:在X轴上的缩放比例
  • fy:在y轴上的缩放比例
  • interpolation:插值方式
    • INTER_NN:最近邻插值
    • INTER_LINEAR:双线性插值
    • INTER_AREA:使用像素关系重采样,当图像缩小时,可以避免波纹出现;当图像放大时,类似INTER_NN方法
    • INTER_CUBIC:立方插值

注意:dsize与fx和fy不能同时为0


http://www.ppmy.cn/news/1548463.html

相关文章

Spring MVC前后端数据传输项目实践

目录 任务&#xff1a; 列表页界面设计 ​编辑 新增操作的界面设计 编辑操作的界面设计 删除操作的界面设计 ​编辑 操作流程&#xff1a; 新增项目模块 导入相关依赖 配置Web.xml 配置spring-mvc.xml Model分析 实体类User的实现 User的Vo类的实现 业务分析 业…

【WPF】Prism学习(六)

Prism Dependency Injection 1.依赖注入&#xff08;Dependency Injection&#xff09; 1.1. Prism与依赖注入的关系&#xff1a; Prism框架一直围绕依赖注入构建&#xff0c;这有助于构建可维护和可测试的应用程序&#xff0c;并减少或消除对静态和循环引用的依赖。 1.2. P…

Docker下网络性能问题排查

一 背景 docker 下的nginx的服务&#xff0c;在一些情况下访问请求会反馈比较慢&#xff0c;根据网文学习下&#xff0c;记录下一些实验过程。 二 验证环境 docker 太难下载了&#xff0c;找了一个老的环境的nginx&#xff0c;导入到系统中来&#xff1a; // 导入nginx # dock…

Flink是如何实现 End-To-End Exactly-once的?

flink 如何实现端到端的 Exactly-once? 端到端包含 Source, Transformation,Sink 三部分的Exactly-once Source&#xff1a;支持数据的replay&#xff0c;如Kafka的offset。Transformation&#xff1a;借助于checkpointSink&#xff1a;Checkpoint 两阶段事务提交 两阶段提…

基于Java Springboot甘肃旅游管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

视频融合室内定位:三维可视化大屏监控

随着物联网技术的迅猛发展&#xff0c;室内定位与视频融合技术在各行各业中得到了广泛应用。不仅能够提供精确的位置信息&#xff0c;还能通过实时视频监控实现全方位数据的可视化。 与此同时&#xff0c;数字孪生等技术的兴起为智慧城市、智慧工厂等应用提供了强大支持&#…

Axure设计之日期时间范围选择器

在产品设计和原型制作过程中&#xff0c;日期时间范围选择器是一个常见的需求。Axure作为一个强大的原型设计工具&#xff0c;能够帮助我们快速实现这一功能。通过利用Axure的动态面板、中继器、文本框、按钮以及时间函数&#xff0c;我们可以轻松制作一个功能完备的日期时间范…

CFD 应用于分离过程:旋风分离器(第 2 部分)

我们在上一篇文章中介绍了工业应用中主要涉及的分离过程&#xff0c;重点介绍了气固旋风分离器。如前所述&#xff0c;旋风分离器主要依靠离心力将固体颗粒从气流中分离出来。这些设备设计用于各种操作条件&#xff0c;由于其结构简单&#xff0c;投资和维护成本较低 [1]。在这…