opencv-c++

这篇具有很好参考价值的文章主要介绍了opencv-c++。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、基础类型与图像视频读取

1、基础类型

1、接口类

类型 说明
InputArray 只读输入数组传递到 OpenCV 函数的代理类
OutputArray 这种类型与 InputArray 非常相似,只是它用于输入/输出和输出函数参数
InputOutputArray 继承了OutputArray,作为输入输出接口,增加了一些功能
InputArrayOfArrays typedef InputArrayInputArrayOfArrays
OutputArrayOfArrays typedef OutputArrayOutputArrayOfArrays
InputOutputArrayOfArrays typedef OutputArrayInputOutputArrayOfArrays

输入排列:InputArray
输出排列:OutputArray
输入输出排列:InputOutputArray

后三者是ArraysOfArrays,是前三者的排列,即排列的排列,定义使用了typedef。

2、Mat图像类

Mat本质是一个n维密集运算数组,是Matrix的简写。相似的有UMat,表示GPU Mat,GMat,表示G-API的Mat接口。

3、运算类

类型 说明
Matx 定阶矩阵类,即确定规模大小的矩阵类
Vec 向量类

4、定义类

类型 说明
Point 二维点类
Point3 三维点类
Rect 矩形类
RotatedRect 旋转矩形类
Range 范围类
Scalar 通道类
Size 规格类

2、图像视频io

1、函数

  • Mat cv::imread (const String&filename,int flags = IMREAD_COLOR)
  • //从指定文件加载图像,如果无法读取,那么函数会返回一个空矩阵(Mat::data==NULL)
  • bool cv::imwrite ( const String & filename,InputArray img,const std::vector> & params = std::vector< int >() )
  • //imwrite函数将图像保存到指定的文件中。根据文件扩展名选择图像格式(有关扩展名列表,请参阅cv::imread)。通常,使用此功能只能保存8位单通道或3通道(具有“BGR”通道顺序)图像

2、类

1、VideoCapture

常用函数

VideoCapture (const String &filename, int apiPreference=CAP_ANY)

VideoCapture (int index, int apiPreference=CAP_ANY)

virtual bool open (const String &filename, int apiPreference=CAP_ANY)

virtual bool open (int index, int apiPreference=CAP_ANY)

virtual bool isOpened () const

virtual double get (int propId) const

virtual bool set (int propId, double value)

virtual void read ()

virtual void release ()

virtual VideoCapture & operator>> (const Mat &image)

2、VideoWriter

常用函数

VideoWriter (const String &filename, int apiPreference, int fourcc, double fps, Size frameSize, bool isColor=true)

//VideoWriter进行了四次有参重载,一次无参重载

virtual bool isOpened () const

virtual bool open (const String &filename, int fourcc, double fps, Size frameSize, bool isColor=true)

//open进行了四次重载

virtual double get (int propId) const

virtual bool set (int propId, double value)

virtual VideoWriter & operator<< (const Mat &image)

二、图像显示与GUI

OpenCV是计算机视觉库,有了图像处理,当然不可或缺的有图像显示和相应的图形界面接口了。

  • 展示图象

void cv::imshow (const String & winname,InputArray mat )

imshow函数在指定窗口中显示图像。如果窗口是使用cv::window_AUTOSIZE标志创建的,则图像将以其原始大小显示,但仍受屏幕分辨率的限制。否则,将缩放图像以适应窗口。该功能可根据图像的深度缩放图像:

-如果图像是8位无符号的,它将按原样显示。

-如果图像是16位无符号或32位整数,则像素除以256。也就是说,值范围[0255*256]映射到[0255]。

-如果图像是32位或64位浮点,则像素值乘以255。也就是说,值范围[0,1]映射到[0255]。

若窗口是使用OpenGL支持创建的,那个么cv::imshow也支持ogl::Buffer、ogl::Texture2D和cuda::GpuMat作为输入。

如果该窗口不是在此函数之前创建的,则假定使用cv::window\u AUTOSIZE创建窗口。

如果需要显示大于屏幕分辨率的图像,则需要在imshow之前调用namedWindow(“,WINDOW_NORMAL”)

  • 键盘响应

int cv::waitKey (int delay = 0)

函数waitKey无限期地等待一个键事件(当延迟<=0时)或延迟毫秒(当它为正时)。由于操作系统在切换线程之间有一个最小的时间间隔,因此函数不会完全延迟ms,它将至少延迟ms,这取决于当时计算机上运行的其他内容。它返回按下的键的代码,如果在指定时间之前没有按下任何键,则返回-1。

三、图像色彩学

1、常用函数

1、二值化函数

  • double cv::threshold ( InputArray src,OutputArray dst,double thresh,double maxval,int type)
  • 将固定级别阈值应用于每个数组元素。此外,特殊值#THRESH_OTSU或#THRESH_TRIANGLE可与上述值之一组合。在这些情况下,函数使用大津算法或三角形算法确定最佳阈值,并使用它代替指定的阈值。

2、色彩空间转换函数’

  • void cv::cvtColor (InputArray src,OutputArray dst,int code,int dstCn = 0 )
  • 将图像从一个颜色空间转换为另一个颜色空间。该函数用于将输入图像从一个颜色空间转换为另一个颜色空间。如果从RGB颜色空间转换为,则应明确指定通道的顺序(RGB或BGR)。请注意,OpenCV中的默认颜色格式通常称为RGB,但实际上是BGR(字节颠倒)。因此,标准(24位)彩色图像中的第一个字节将是8位蓝色分量,第二个字节将是绿色,第三个字节将是红色。第四、第五和第六个字节将是第二个像素(蓝色、绿色、红色),依此类推。

3、图像通道分割

  • void cv::split (const Mat & src,Mat * mvbegin )
  • 将多通道阵列划分为多个单通道阵列。如果需要提取单个通道或进行其他复杂的通道排列,则使用MixChannel。

4、通道合并

  • void cv::merge (const Mat* mv, size_t count, OutputArray dst)
  • 从多个单通道阵列中创建一个多通道阵列。将多个数组合并为一个多通道数组,也就是说,输出数组的每个元素都是输入数组元素的串联,其中第i个输入数组的元素被视为mv[i].channels()-元素向量。

5、通道混合

  • void cv::mixChannels(const Mat src,size_t nsrcs,Mat * dst,size_t ndsts,const int * fromTo,size_t npairs )
  • 将指定通道从输入阵列复制到输出阵列的指定通道。

四、图像几何学

1、常用函数

1、裁剪

在计算机视觉中,通常将处理得到有价值的区域称作ROI(region of interest),进行裁剪时,其实是将ROI的坐标作为索引提取出来。

裁剪没有独立的函数,图像裁剪通过直接使用原图像对象中的索引进行截取。

2、拼接

拼接分为横向拼接函数(hconcat),纵向拼接函数(vconcat)

横向拼接

  • void cv::hconcat (const Mat * src,size_t nsrc,OutputArray dst)
  • void cv::hconcat(InputArray src1,InputArray src2,OutputArray dst)
  • 将水平连接应用于给定矩阵

纵向拼接

  • void cv::vconcat(const Mat * src,size_t nsrc,OutputArray dst)
  • void cv::vconcat(InputArray src1,InputArray src2,OutputArray dst)
  • 对给定矩阵应用垂直连接

3、翻转

  • void cv::flip(InputArray src,OutputArray dst,int flipCode )
  • 围绕垂直、水平或两个轴翻转二维阵列

4、缩放

  • void cv::resize(InputArray src,OutputArray dst,Size dsize,double fx = 0,double fy = 0,int interpolation = INTER_LINEAR )
  • 调整图像的大小

5、旋转

这个旋转只可以旋转90°、180°、270°文章来源地址https://www.toymoban.com/news/detail-721271.html

  • void cv::rotate(InputArray src,OutputArray dst,int rotateCode)
  • 以90度的倍数旋转二维阵列

6、图像位运算

  • void cv::bitwise_and (InputArray src1,InputArray src2,OutputArray dst,InputArray mask = noArray() )
  • 计算两个数组(dst=src1&src2)的按位合取计算两个数组或一个数组和一个标量的每元素按位合取。

五、图像形态学

1、滤波

  • 图像滤波增强处理实质上就是运用滤波技术来增强图像的某些空间频率特征,以改善地物目标与领域或背景之间的灰度反差。遥感系统成像过程中可能产生的”模糊”作用,常使遥感图像上某些用户感兴趣的线性形迹、纹理与地物边界等信息显示得不够清晰,不易识别。需要通过采用领域处理方法来分析、比较和调整像元与其周围相邻像元间的对比度关系,图像才能得到增加,也就是说需要采用滤波增加技术处理。

2、常用函数

1、盒式滤波

  • void cv::boxFilter ( InputArray src,
    OutputArray dst,
    int ddepth,
    Size ksize,
    Point anchor = Point(-1,-1),
    bool normalize = true,
    int borderType = BORDER_DEFAULT
    )
  • 使用长方体过滤器使图像模糊。非正规化盒滤波器用于计算每个像素邻域上的各种积分特性,例如图像导数的协方差矩阵(用于密集光流算法等)。如果需要计算可变大小窗口上的像素和,请使用#积分。

2、均值滤波

  • void cv::blur (InputArray src,
    OutputArray dst,Size ksize,Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT )
  • 使用规格化长方体过滤器模糊图像

3、中值滤波

  • void cv::medianBlur(InputArray src,OutputArray dst,int ksize )
  • 使用中值滤波器使图像模糊。该函数使用带有ksize*ksize光圈的中值滤波器平滑图像。多通道图像的每个通道都是独立处理的。支持就地操作。

4、高斯滤波

  • void cv::GaussianBlur (InputArray src,OutputArray dst,Size ksize,double sigmaX,double sigmaY = 0,int borderType = BORDER_DEFAULT )
  • 使用高斯滤波器使图像模糊。该函数使用指定的高斯核卷积源图像。支持就地筛选。

5、双边滤波

  • void cv::bilateralFilter( InputArray src,OutputArray dst,int d,double sigmaColor,double sigmaSpace,int borderType = BORDER_DEFAULT )
  • 将双边过滤器应用于图像.该函数对输入图像应用双边滤波,如中所述.双边滤波器可以很好地减少不必要的噪音,同时保持边缘相当锐利。但是,与大多数过滤器相比,它的速度非常慢。

2、腐蚀膨胀处理

1、膨胀

  • void cv::dilate ( InputArray src,OutputArray dst,InputArray kernel,Point anchor = Point(-1,-1),int iterations = 1,int borderType =BORDER_CONSTANT,const Scalar & borderValue = morphologyDefaultBorderValue())
  • 通过使用特定的结构元素来扩展图像

2、腐蚀

  • void cv::erode(InputArray src,OutputArray dst,InputArray kernel,Point anchor = Point(-1,-1),int iterations = 1,int borderType = BORDER_CONSTANT,
    const Scalar & borderValue = morphologyDefaultBorderValue() )

3、形态学操作函数

  • void cv::morphologyEx ( InputArray src,OutputArray dst,int op,InputArray kernel,Point anchor = Point(-1,-1),int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar & borderValue =morphologyDefaultBorderValue() )

4、构建内核函数

  • Mat cv::getStructuringElement ( int shape,Size ksize,Point anchor = Point(-1,-1) )

3、霍夫运算

1、霍夫圆

  • void cv::HoughCircles (InputArray image,OutputArray circles,int method,double dp,double minDist,double param1 = 100,double param2 = 100,int minRadius = 0,int maxRadius = 0 )

2、霍夫线

  • void cv::HoughLines ( InputArray image,OutputArray lines,double rho,double theta,int threshold,double srn = 0,double stn = 0,double min_theta = 0,double max_theta = CV_PI )

六、图像轮廓处理

1、常用函数

1、寻找轮廓

  • void cv::findContours ( InputArray image,
    OutputArrayOfArrays contours,
    OutputArray hierarchy,
    int mode,
    int method,
    Point offset = Point()
    )
  • 在二值图像中查找轮廓。该函数使用@cite Suzuki85算法从二值图像检索轮廓。轮廓线是形状分析、目标检测和识别的有用工具。请参见OpenCV示例目录中的squares.cpp。

2、Canny 边缘检测

  • void cv::Canny ( InputArray image,
    OutputArray edges,
    double threshold1,
    double threshold2,
    int apertureSize = 3,
    bool L2gradient = false
    )
  • void cv::Canny ( InputArray dx,
    InputArray dy,
    OutputArray edges,
    double threshold1,
    double threshold2,
    bool L2gradient = false
    )
  • 使用Canny算法查找图像中的边缘。该函数在输入图像中查找边,并使用Canny算法在输出贴图边中标记它们。阈值1和阈值2之间的最小值用于边缘链接。最大值用于查找强边的初始分段。

3、Sobel算子

  • void cv::Sobel ( InputArray src,
    OutputArray dst,
    int ddepth,
    int dx,
    int dy,
    int ksize = 3,
    double scale = 1,
    double delta = 0,
    int borderType = BORDER_DEFAULT
    )

4、轮廓平滑,多边近似

  • void cv::approxPolyDP ( InputArray curve,
    OutputArray approxCurve,
    double epsilon,
    bool closed
    )

5、最小面积旋转矩形近似

  • RotatedRect cv::minAreaRect ( InputArray points )

6、边缘矩形近似

  • Rect cv::boundingRect ( InputArray array )

7、最小面积圆形近似

  • void cv::minEnclosingCircle ( InputArray points,
    Point2f & center,
    float & radius
    )

8、轮廓周长

  • double cv::arcLength ( InputArray curve,
    bool closed
    )

9、轮廓面积

  • double cv::contourArea ( InputArray contour,
    bool oriented = false
    )

七、映射变换

1、仿射变换

1、仿射变换

  • void cv::warpAffine ( InputArray src,
    OutputArray dst,
    InputArray M,
    Size dsize,
    int flags = INTER_LINEAR,
    int borderMode = BORDER_CONSTANT,
    const Scalar & borderValue = Scalar()
    )
  • 仿射变换的旋转矩阵可以用两种方式得到,一种是用点与点之间的对应关系得到矩阵对应函数,即为getAffineTransform函数,另一种即为构建旋转矩阵,使原图像变换,即为getRotationMatrix2D函数。

2、得到仿射变换核

  • Mat cv::getAffineTransform ( const Point2f src[],
    const Point2f dst[]
    )
  • Mat cv::getAffineTransform ( InputArray src,
    InputArray dst
    )

3、创建旋转矩阵

  • Mat cv::getRotationMatrix2D ( Point2f center,
    double angle,
    double scale
    )

2、透视变换

1、透视变换

  • void cv::warpPerspective ( InputArray src,
    OutputArray dst,
    InputArray M,
    Size dsize,
    int flags = INTER_LINEAR,
    int borderMode = BORDER_CONSTANT,
    const Scalar & borderValue = Scalar()
    )

2、获取透视变换矩阵

  • Mat cv::getPerspectiveTransform (InputArray src,InputArray dst,int solveMethod = DECOMP_LU)

八、绘图函数

1、常见函数

1、线标画函数

  • void cv::line ( InputOutputArray img,
    Point pt1,
    Point pt2,
    const Scalar & color,
    int thickness = 1,
    int lineType = LINE_8,
    int shift = 0
    )

2、矩形绘制

  • void cv::rectangle ( InputOutputArray img,
    Point pt1,
    Point pt2,
    const Scalar & color,
    int thickness = 1,
    int lineType = LINE_8,
    int shift = 0
    )

3、圆形绘制

  • void cv::circle ( InputOutputArray img,
    Point center,
    int radius,
    const Scalar & color,
    int thickness = 1,
    int lineType = LINE_8,
    int shift = 0
    )

4、标志绘制

  • void cv::drawMarker ( InputOutputArray img,
    Point position,
    const Scalar & color,
    int markerType = MARKER_CROSS,
    int markerSize = 20,
    int thickness = 1,
    int line_type = 8
    )

5、轮廓绘制

  • void cv::drawContours ( InputOutputArray image,
    InputArrayOfArrays contours,
    int contourIdx,
    const Scalar & color,
    int thickness = 1,
    int lineType = LINE_8,
    InputArray hierarchy = noArray(),
    int maxLevel = INT_MAX,
    Point offset = Point()
    )
  • 绘制轮廓或填充轮廓。如果厚度>=0,该函数在图像中绘制轮廓轮廓;如果厚度<0,则填充轮廓所限定的区域。下面的示例显示了如何从二进制图像检索连接的组件并为其添加标签

6、绘制文字

  • void cv::putText ( InputOutputArray img,
    const String & text,
    Point org,
    int fontFace,
    double fontScale,
    Scalar color,
    int thickness = 1,
    int lineType = LINE_8,
    bool bottomLeftOrigin = false
    )
  • 绘制文本字符串。函数cv::putText在图像中呈现指定的文本字符串。无法使用指定字体呈现的符号将替换为问号。

到了这里,关于opencv-c++的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 开源计算机视觉库OpenCV详解

    目录 1、概述 2、OpenCV详细介绍 2.1、OpenCV的起源 2.2、OpenCV开发语言 2.3、OpenCV的应用领域 3、OpenCV模块划分 4、OpenCV源码文件结构 4.1、根目录介绍 4.2、常用模块介绍 4.3、CUDA加速模块 5、OpenCV配置以及Visual Studio使用OpenCV 6、关于Lena图片 7、OpenCV和OpenGL的区别 8、OpenCV与YOLO的区别

    2024年02月10日
    浏览(79)
  • 【opencv】计算机视觉基础知识

    目录 前言 1、什么是计算机视觉 2、图片处理基础操作 2.1 图片处理:读入图像 2.2 图片处理:显示图像 2.3 图片处理:图像保存 3、图像处理入门基础 3.1 图像成像原理介绍 3.2 图像分类 3.2.1 二值图像 3.2.2灰度图像 3.2.3彩色图像(RGB) 4、像素处理操作 4.1 读取像素 4.2 修改像素

    2024年02月04日
    浏览(66)
  • 【OpenCV】OpenCV:计算机视觉的强大工具库

    摘要   OpenCV是一个广泛应用于计算机视觉领域的开源工具库,为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域,并探讨它在实践中的重要性和前景。 📕作者简介: 热爱跑步的恒川 ,致力于C/C++、Java、Python等多编程语言,热爱跑步,

    2024年02月03日
    浏览(48)
  • OpenCV第 1 课 计算机视觉和 OpenCV 介绍

      我们人类可以通过眼睛看到五颜六色的世界,是因为人眼的视觉细胞中存在分别对红、绿、蓝敏感的 3 种细胞。其中的光感色素根据光线的不同进行不同比例的分解,从而让我们识别到各种颜色。   对人工智能而言,学会“ 看 ”也是非常关键的一步。那么机器人是如

    2024年01月24日
    浏览(50)
  • Python OpenCV 计算机视觉:6~7

    原文:OpenCV Computer Vision with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,你最好真的没有;当别人说你做过某些事的时候,你也最好真的做过。 本附录显示了如何在

    2024年02月02日
    浏览(50)
  • 计算机视觉:使用opencv实现车牌识别

    汽车车牌识别(License Plate Recognition)是一个日常生活中的普遍应用,特别是在智能交通系统中,汽车牌照识别发挥了巨大的作用。汽车牌照的自动识别技术是把处理图像的方法与计算机的软件技术相连接在一起,以准确识别出车牌牌照的字符为目的,将识别出的数据传送至交

    2024年02月04日
    浏览(51)
  • 【计算机视觉 · OpenCV】使用 OpenCV 调用手机摄像头

    Droidcam 是一款可以将手机变成网络摄像头的工具,我们可以利用 Droidcam 让 OpenCV 拥有调用手机摄像头的能力。 2.1 安装 DroidCam 在手机和电脑上分别安装 DroidCam 的客户端和服务端 下载地址:https://pan.baidu.com/s/1DrBn3P1Bx-SXa4d6oziifA?pwd=gr1o 提取码:gr1o 2.2 测试连接状态 手机和电脑需

    2024年02月09日
    浏览(52)
  • 【开源计算机视觉库OpencV详解——超详细】

    OpenCV(Open Source Computer Vision Library)是一个开放源码的计算机视觉和机器学习库,它由一系列C函数和少量C++类构成,并提供了Python、Ruby、MATLAB等语言的接口,OpenCV专为实时图像处理和计算机视觉任务而设计,广泛应用于面部识别、对象识别、运动跟踪和更多领域。 基本图像

    2024年02月21日
    浏览(51)
  • 能用OpenCV做的15大计算机视觉任务

    使用OpenCV,你几乎可以完成你能想到的每种计算机视觉任务。现实生活中的问题要求同时使用许多计算机视觉算法和模块来获得所需的结果。因此,你只需了解要用哪些OpenCV模块和函数来获得你想要的东西。 让我们来看看OpenCV中可以开箱即用的功能。 OpenCV的最大优点之一是

    2024年02月04日
    浏览(43)
  • OpenCV:打开计算机视觉的魔法之门

    嗨,亲爱的读者们!欢迎来到这场计算机视觉的奇妙之旅!今天,我们将一同揭开计算机视觉的神秘面纱,而我们的向导就是一款强大的工具——OpenCV。别担心,我们将从零开始,一步步地领略计算机视觉的魅力。 首先,让我们聊一聊OpenCV。OpenCV,全称为Open Source Computer Vi

    2024年01月25日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包