当前位置: 首页 > article >正文

OpenCV基础(2)

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.kler.cn/a/404890.html

相关文章:

  • 国标GB28181视频平台EasyCVR视频融合平台H.265/H.264转码业务流程
  • 使用redis-shake工具进行redis的数据同步
  • 中间件--laravel进阶篇
  • Elasticsearch面试内容整理-实践与应用场景
  • Matlab 答题卡方案
  • JAVA:探索 PDF 文字提取的技术指南
  • React基础知识一
  • P8692 [蓝桥杯 2019 国 C] 数正方形:结论,组合数学
  • 使用ENSP实现静态路由
  • CPU详细介绍
  • Grafana监控PostgreSQL
  • 机器学习系列----关联分析
  • 京东最新黑边背景旋转验证码识别
  • ApiChain 从迭代到项目 接口调试到文档生成单元测试一体化工具
  • Docker+fastapi
  • 2.预备知识
  • SentenceTransformers×Milvus:如何进行向量相似性搜索
  • SAP PI/PO Proxy2JDBC SQL_QUERY动态接口示例
  • H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连
  • 视频流媒体播放器EasyPlayer.js无插件直播流媒体音视频播放器Android端webview全屏调用无效问题
  • Hello-Go
  • 腾讯云单元化架构体系介绍
  • 深入探索Solana链上的Meme生态:创新、潜力与挑战#区块链开发#dapp开发
  • xml和xpath
  • C# BitmapSource小节
  • TensorFlow如何调用GPU?