opencv c语言教程,OpenCV图像处理视频教程——入门篇(一)

1 概述 - OpenCV介绍与环境搭建

acae4cbb3cc7f1f522ba8992aae19be4.png

HighGUI部分

Image Process

2D Feature

Camera Calibration and 3D reconstruction

Video Analysis

Object Detection

Machine Learning

GPU加速

2 加载、修改、保存图像

1 加载图像(用cv::imread)

2 修改图像(cv::cvtColor)

3 保存图像(cv::imwrite)

4 代码演示

(1)加载图像(用cv::imread)

imread功能是加载图像文件称为一个Mat对象(类对象)(源码中Mat类有多个重载的构造函数[参数表不同])

cv::Mat cv::imread(const cv::String &filename, int flags = 1)

其中第一个参数表示图像文件名称(文件的绝对地址)

第二个参数,表示加载的图像是什么类型,常见的有三个参数值(都是enum枚举类型)

IMREAD_UNCHANGED(<0)表示加载原图,不做任何改变

IMREAD_GRAYSCALE(0)表示把原图作为灰度图像加载进来

IMREAD_COLOR(>0)表示把原图作为RGB图像加载进来

注意:OpenCV支持JPG、PNG、TIFF等常见格式图像文件加载。

(2)显示图像(cv::namedWindow与cv::imshow)

namedWindow功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放的无需自己销毁(早年需要destroyWindow)

常见用法namedWindow("Window Title", WINDOW_AUTOSIZE)

WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小

WINDOW_NORMAL,跟QT集成的时候会使用,允许修改窗口大小

imshow根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二个参数是Mat对象

(3)修改图像(cv::cvtColor)

cvtColor的功能是把图像从一个色彩空间转换到另一个色彩空间。调整亮度/饱和度时先转换空间,改变效果后,再转换回来。有三个参数

表示源图像

表示色彩空间转换之后的图像

表示源和目标色彩空间

COLOR_BGR2HLS(L->Light[亮度],S->saturation[饱和度])

COLOR_BGR2GRAY(BGR=>RGB,原因是B通道在前)

COLOR_BGR2HSV(S->saturation[饱和度])

cvtColor(image, gray_image, COLOR_BGR2GRAY)

(image, gray_image都是Mat类对象)

(4)保存图像(cv::imwrite)

保存图像到指定目标路径(?路径中一定要加文件名.后缀名)

只有8位、16位的PNG、JPG、Tiff文件格式而且是单通道或者三通到的BGR图像才可以通过这种方式保存

保存PNG格式的时候可以保存透明通道的图片

可以指定压缩参数

3 矩阵的掩膜操作

1 获取图像像素指针

2 掩膜操作解释

3 代码演示

(1)获取图像像素指针

CV_Assert(myImage.depth() == CV_8U);测试位图深度是否为8位,如果False则停止运行

位图深度:在灰度图像中8位代表从黑(0)到白(1)分为256个颜色深度;在RGB图像中代表每个通道(每个原色)都分为256个子色,总体上为256 * 256 * 256种颜色

Mat.ptr(int i = 0)(uchar是unsigned char,一个字节0~ 255,像素值也是在0~255)获取像素矩阵的指针,索引i表示第几行,从0开始计行数

获得当前行指针const uchar* current = myImage.ptr(row);

获取当前像素点P(row, col)的像素值p(row, col) = current[col];

(2)像素范围处理saturate_cast

saturate_cast(-100),返回0

saturate_cast(288),返回255

saturate_cast(124),返回124

这个函数的功能是确保RGB值的范围在0~255之间

(3)掩膜操作解释

d796b0f4f5e777a1c33004f35cac368f.png

代码示例:(RGB图像可以理解为一个像素占三个字节(R/G/B))

457a940734962d477fe49f0c25567c7f.png

这是一张3*3的(255, 0, 0)的纯红色图片

04f07e3d3a870b2eea59e76c0fa17fec.png

(.ptr(int)是Mat类的成员函数,uchar用于表示像素0~255)

//示例中使用

Mat resultImage;

myImage.copyTo(resultImage);//将图片

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值