
OpenCV C++
文章平均质量分 54
以OpenCV 4 为主,从入门学习到实战应用的知识点与示例讲解,附代码和注释,图文并茂,记录平时遇到的问题与解决方法。主要内容:图像变换、图像金字塔、模板匹配、图像滤波、形态学、目标检测、图像修复、特征检测与匹配、单/双目视觉、视频分析等。
R-G-B
计算机硕士,机器视觉、图像处理
展开
-
错误 C4996 ‘fopen‘: This function or variable may be unsafe. Consider using fopen_s instead. To disabl
编译出错信息 error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.错误c4996 fopen的:这个函数或变量可能是不安全的,考虑改用fopen_s。要禁用弃用,请使用_CRT_SECURE_NO_WARN原创 2022-04-22 11:21:26 · 21659 阅读 · 8 评论 -
【OpenCV C++】照片修改像素(尺寸大小)
照片改变像素(尺寸大小)问题描述语言运行环境代码运行结果照片换底参照 https://editor.youkuaiyun.com/md/?articleId=112390095问题描述一张照片修改为任意指定的像素(尺寸、分辨率、宽高)下面将一张分辨率415615的照片,改为358441语言C++运行环境VS2019OpenCV 4.20代码#include <opencv2/opencv.hpp>#include <iostream>using namespace原创 2021-01-09 16:18:20 · 8280 阅读 · 0 评论 -
【OpenCV C++】 compare函数解释,及 典型应用场景
最终输出像素值为 255(这3个通道计算结果是 (B || G || R) 的关系,即 255 || 0 || 255最终结果是255)。若 src1 和 src2 数据类型不同(如 CV_8U 和 CV_32F),OpenCV 会自动转换为更高精度的数据类型后再比较。输出矩阵 dst 始终为 二值化单通道图像(CV_8UC1)。img1 第一个像素值:(B=120, G=80, R=200)Blue通道:120 = 100 → 满足条件。Red通道:200 = 180 → 满足条件。原创 2025-03-19 21:27:33 · 39 阅读 · 0 评论 -
【OpenCV C++】如何快速 高效的计算出图像中大于值的像素个数? 遍历比较吗? No,效率太低!那么如何更高效?
一幅图像的目标区域ROI尺寸为60*35的灰度图,快速计算出大于backVal的像素个数,其中backVal=200;(注意这里只统计ROI区域的像素个数,一般来说只对目标区域处理,便于提高效率)思路1:是遍历每个像素,然后比较是否大于200,统计次数。但这样做效率可能不高,尤其是当图像较大时。不过这里图像是60x35,不算太大,可能直接遍历也行。不过有没有更高效的方法呢?记得OpenCV有一些矩阵操作函数,可能可以利用这些函数来避免显式循环。比如,比较操作可以用cv::compare或者直接使用矩阵表原创 2025-03-19 21:22:15 · 287 阅读 · 0 评论 -
【OpenCV C++】compare和threshold 看起来都有二值化效果? 那么二者效率?
在OpenCV中,cv::compare()与二值化函数cv::threshold()均可实现像素值筛选,但二者实现机制和效率存在差异:1. 实现原理对比:直接对输入矩阵执行逐像素比较,生成二值结果(满足条件的为255,否则为0)。该函数仅涉及一次比较运算,无额外计算步骤。:通过指定阈值类型(如THRESH_BINARY)生成二值图像,需处理阈值判断逻辑和可能的类型转换。对于固定阈值(如THRESH_BINARY),其底层实现与cv::compare()类似,但函数调用时需解析更多参数,存在额外分支原创 2025-03-19 21:19:46 · 28 阅读 · 0 评论 -
【C++】严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误 C2572 “saveImage2”: 重定义默认参数 : 参数 1 cv_gStreamer E:\projects\C0
头文件应该怎样定义?注意,在 C++ 头文件 (.h) 中定义 saveImage2 函数时,默认参数只能在声明时提供,不能在实现时重复定义默认参数,否则会导致 C2572 错误。如果头文件而函数是现实,还写默认参数,那么就会报错严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息。原创 2025-03-10 21:49:39 · 194 阅读 · 0 评论 -
【OpenCV C++】存图,如何以时间命名,“年月日-时分秒“产生唯一的文件名呢?“年月日-时分秒-毫秒“ 自动检查存储目录,若不存在自动创建存图
头文件应该怎样定义?注意,在 C++ 头文件 (.h) 中定义 saveImage2 函数时,默认参数只能在声明时提供,不能在实现时重复定义默认参数,否则会导致 C2572 错误。如果头文件而函数是现实,还写默认参数,那么就会报错严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息。原创 2025-03-10 21:48:00 · 259 阅读 · 0 评论 -
【C++】 C++ 配置文件读取数组:读取 int[], float[], string[],bool[];读取 int, float, string,bool;错误输出,长度判定等
1.读取 int, float, string,bool(getInt, getFloat, getString,getBool)。 2.读取 int, float, string 数组(getIntArray, getFloatArray, getStringArray,getBoolArray)。3.自动判断数组长度。 4.bool 类型大小写不敏感(true/false、TRUE/FALSE、TrUe/FaLsE 都可正确解析)原创 2025-03-04 17:30:05 · 138 阅读 · 0 评论 -
【OpenCV C++】以时间命名存图,自动检查存储目录,若不存在自动创建, 按下空格、回车、Q、S自动存图
等待用户按键,按键空格,回车,Q,S任意一个,都会保存图像。原创 2025-02-28 15:36:13 · 408 阅读 · 0 评论 -
【OpenCV C++】图像清晰度增强:拉普拉斯锐化,SUM锐化,普通锐化
最大值:无上限,但过大的 sigma 会导致图像的细节完全丢失,并使模糊效果过于强烈。最小值:1,即 1x1 核,实际上等于没有进行模糊处理,但通常不推荐这么小的核。强烈模糊:sigma = 2.0 到 3.0(适用于需要模糊化大范围的图像)大尺寸模糊:kernel_size = 9(适用于需要强模糊效果的图像)温和模糊:sigma = 0.5 到 1.0(适用于一般的模糊效果)适度模糊:sigma = 1.0 到 2.0(适用于较强的模糊)强烈锐化:alpha = 2.0 到 5.0(适用于模糊图像)原创 2025-02-27 18:40:17 · 200 阅读 · 0 评论 -
【C++】int& a, cv::Mat& img 作为入口参数是,使用了“&”符号,那么这个符号用什么作用? 一共有哪几种含义? 分别用于什么场景?
cv::Mat& img 作为入口参数是,使用了“&”符号,那么这个符号用什么作用?一共有哪几种含义?分别用于什么场景?在C++中,符号&有多种不同的含义,具体取决于它所处的上下文。原创 2024-05-16 19:07:03 · 436 阅读 · 0 评论 -
【OpenCV C++】cv::Scalar scalar = cv::mean(BarImg); 求图像均值时scalar 为啥有4个元素?
这是因为OpenCV的cv::Scalar类型设计用于处理多种类型的图像,包括那些具有4个通道的图像(如带有Alpha通道的RGBA图像)。即使图像只有3个通道(BGR),cv::Scalar对象的第四个元素也会被设置为零。在OpenCV中,当使用cv::mean函数计算图像的均值时,返回的。对于单通道的灰度图像。原创 2024-05-16 11:13:57 · 497 阅读 · 0 评论 -
【OpenCV C++】cvtColor将彩色图像转换为灰度图时,3个通道的灰度值是如何处理的? 三个通道是如何加权计算的?三个通道取平均得到灰度图吗?
权重(0.299、0.587、0.114)是根据人眼对不同颜色的敏感度决定的。人眼对绿色最敏感,因此绿色通道的权重最大。在OpenCV中,使用cv::cvtColor函数将。R、G、B 分别代表红色、绿色和蓝色通道的值。,3个通道的灰度值并不是简单地取平均值,而是。原创 2024-05-16 11:09:17 · 429 阅读 · 0 评论 -
[OpenCV C++] matchTemplate 模板匹配,设置阈值来筛选匹配结果,判断匹配是否成功
为了解决这个问题,可以通过设置阈值来筛选匹配结果,只有当匹配度高于某个阈值时,才认为匹配成功。如果匹配度低于阈值,将其视为匹配失败,并给出相应的提示。在 OpenCV 中,matchTemplate 函数是用于模板匹配的,它会在图像中寻找与给定模板最相似的区域。但是,即使没有正确匹配到目标,matchTemplate 函数也会返回一个结果,这会导致错误出现。原创 2024-03-27 19:53:37 · 796 阅读 · 0 评论 -
【C++】将坐标点写入到txtx文本,将坐标点写入到 excel表格
有自动以坐标点,需要存储。原创 2024-03-20 14:46:13 · 325 阅读 · 0 评论 -
【OpenCV C++】找到图像中最亮的区域中心,求该区域ROI的平均亮度
【代码】【OpenCV C++】找到图像中最亮的区域中心,求该区域的平均亮度。原创 2024-03-18 08:48:00 · 568 阅读 · 0 评论 -
【OpenCV C++】将float数据和字符串一起打印在iamge上 ,stringstream数值转字符串 VS sprintf_s 数值转字符串
现在,我们在其他的 .cpp 文件中可以包含 image_utils.h 头文件,并调用 drawTextWithFloat 函数了。我们在头文件 image_utils.h 中声明函数,然后在 .cpp 文件 image_utils.cpp 中定义函数实现,在这个示例中,我们在 main 函数中调用了 drawTextWithFloat 函数,并且省略了所有参数的默认值。sprintf_s 函数的安全性可能稍逊于 stringstream,因为它需要手动控制缓冲区的大小,防止溢出。性能方面,通常情况下,原创 2024-03-05 14:45:44 · 362 阅读 · 0 评论 -
【OpenCV C++】Mat img.total() 和img.cols * img.rows 意思一样吗?二者完全相等吗?
为了便于理解,先来梳理一下 Mat img的属性data:数据存储的起始地址 (uchar*类型);dims:矩阵维度。如 3 * 4 的矩阵为 2 维, 3 * 4 * 5 的为3维;channels():通道数量,矩阵中表示一个元素所需要的值的个数。例:3 * 4矩阵中共有12个元素,如果每个元素需要3个值表示,那么此矩阵的通道数为3。常见的是一张彩色图片有B蓝、G绿、R红3个通道;depth():深度,即表示单通道中元素值的位数(bits)。原创 2024-02-27 10:38:03 · 531 阅读 · 0 评论 -
【OpenCV C++】Mat img.total()*img.elemSize() 和img.cols * img.rows * img.channels()意思一样吗?二者完全相等吗?
为了便于理解,先来梳理一下 Mat img的属性data:数据存储的起始地址 (uchar*类型);dims:矩阵维度。如 3 * 4 的矩阵为 2 维, 3 * 4 * 5 的为3维;channels():通道数量,矩阵中表示一个元素所需要的值的个数。例:3 * 4矩阵中共有12个元素,如果每个元素需要3个值表示,那么此矩阵的通道数为3。常见的是一张彩色图片有B蓝、G绿、R红3个通道;depth():深度,即表示单通道中元素值的位数(bits)。原创 2024-02-27 10:30:25 · 432 阅读 · 0 评论 -
如何制作gif动图gif (多图合成gif、GIF录制软件、视频制作成GIF动图)
4.点击浏览,并选择视频的路径,然后点击Upload 加载视频。5.对图片进行编辑,编辑完点击 Convert to GIF!6.转换完成 点击右下角save下载保存图片。1.首先我们要先准备一个视频,并记住视频的总时长。①选择需要制作gif动画的图片将其添加。②调整时间间隔,图片宽高等设置。①选用GifCam录制屏幕操作。④下载到本地就可以了~原创 2023-09-27 20:10:24 · 599 阅读 · 0 评论 -
相机内参外参(Intrinsics & Extrinsics) 与 相机标定参数
深入解读相机矩阵一文带你搞懂相机内参外参(Intrinsics & Extrinsics)相机内参我们通常所说的相机内参是4个,分别为:fx、fy、u0、v0;u0,v0表示图像的中心像素坐标和图像原点像素坐标之间相差的横向和纵向像素数。理论值应该是图像宽度、高度的一半,但实际是有偏差的,一般越好的摄像头则其越接近于分辨率的一半;1、旋转矩阵:描述了世界坐标系的坐标轴相对于摄像机坐标轴的方向2、平移矩阵:描述了在摄像机坐标系下,空间原点的位置原创 2022-12-07 15:34:49 · 4278 阅读 · 0 评论 -
棋盘格标定板、圆点标定板制作 —— A1、A2、A3、A4尺寸制作下载
棋盘格标定板、圆点标定板制作 —— A1、A2、A3、A4尺寸制作下载原创 2024-01-13 08:37:27 · 1017 阅读 · 0 评论 -
工业相机——靶面尺寸、像元尺寸、分辨率 、传感器尺寸
由Sensor对角线长度表示,单位英寸,这里的1英寸=16mm。——靶面尺寸为宽12.7mm*高9.6mm,对角线16mm。——靶面尺寸为宽8.8mm*高6.6mm,对角线11mm。——靶面尺寸为宽7.2mm*高5.4mm,对角线9mm。——靶面尺寸为宽6.4mm*高4.8mm,对角线8mm。——靶面尺寸为宽4.8mm*高3.6mm,对角线6mm。——靶面尺寸为宽3.2mm*高2.4mm,对角线4mm。——靶面尺寸为宽14*高10.5mm,对角线17mm。原创 2024-01-06 12:04:18 · 7349 阅读 · 0 评论 -
工业相机——输出图像格式 RAW、RGB、YUV
CMOS图像传感器输出的原始图像格式是RAW。RAW图像就是CMOS图像感应器将捕捉到的光源信号转化为数字信号的原始数据。RAW文件是一种记录了数码相机传感器的原始信息,同时记录了由相机拍摄所产生的一些原数据(Metadata,如ISO的设置、快门速度、光圈值、白平衡等)的文件。RAW是未经处理、也未经压缩的格式,可以把RAW概念化为“原始图像编码数据”或更形象的称为“数字底片”。RGB565,每个像素用16位表示,RGB分量分别使用5位、6位、5位(常用也就是上说的RGB)。RGB555,每个像素用16原创 2024-01-06 11:50:17 · 2492 阅读 · 0 评论 -
opencv中Mat数据类型中data、size、depth、channels、elemsize、rows、cols、step等属性内涵
用来度量每一个像素中每一个通道的精度,但它本身与图像的通道数无关!elemSize 表示每个元素的大小(单位字节),每个元素可能有多个通道,示例中,每个元素有三个通道,而每个通道类型为CV_16U,算3个通道的总数, 2*3=6。表示的是一个矩阵中的每个元素分别有几个值,如一个4*3的矩阵,有12个元素,每个元素如果有三个值,则此矩阵有三个通道。Mat矩阵的维度,若Mat是一个二维矩阵,则dims=2,三维则dims=3,大多数情况下处理的都是二维矩阵,是一个平面上的矩阵。Mat矩阵元素拥有的通道数。转载 2023-11-20 13:53:18 · 2343 阅读 · 0 评论 -
OpenCV 中Mat.depth()的理解——每个像素的位数——每个像素中每个通道的精度
在opencv的Mat.depth()中得到的是一个 0 – 6 的数字,分别代表不同的位数:enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };CV_8U,是无符号8位像素-即一个像素可以有0-255的值,这是大多数图像和视频格式的正常范围,像素可以有0-1.0之间的任何值,,可见 0和1都代表8位, 2和3都代表16位,4和5代表32位,6代表64位。如CV_8U = CV_8UC1。原创 2023-11-20 13:38:24 · 759 阅读 · 0 评论 -
VS编译器的使用——VS2019新建控制台工程
VS编译器的使用——VS2019新建控制台工程转载 2023-11-20 09:32:40 · 269 阅读 · 0 评论 -
OpenCV C++ 图像 批处理 (批量调整尺寸、批量重命名)
拿着棋盘格,对着相机变换不同的方角度,采集十张以上(以10~20张为宜);或者棋盘格放到桌上,拿着相机从不同角度一通拍摄。以棋盘格,第一个内焦点为坐标原点,便于计算世界坐标系下三维坐标;下面是**批处理(调整尺寸、重命名)**之后的结果。图片命名后,将每个图片名称写到txt文本中备用。批处理(调整尺寸、重命名) 代码实现。原创 2023-11-18 22:09:46 · 718 阅读 · 0 评论 -
OpenCV C++ 张正友相机标定【相机标定原理、相机标定流程、图像畸变矫正】
R是3×3的正交单位矩阵(即旋转矩阵),t为平移向量,R、t与摄像机无关,所以称这两个参数为摄像机的外参数(extrinsicparameter),可以理解为两个坐标原点之间的距离,因其受x,y,z三个方向上的分量共同控制,所以其具有三个自由度。R是3×3的正交单位矩阵(即旋转矩阵),t为平移向量,R、t与摄像机无关,所以称这两个参数为摄像机的外参数(extrinsicparameter),可以理解为两个坐标原点之间的距离,因其受x,y,z三个方向上的分量共同控制,所以其具有三个自由度。原创 2023-11-18 22:03:43 · 1559 阅读 · 0 评论 -
opencv遇到CV_MINMAX未声明标识符问题
opencv遇到CV_MINMAX未声明标识符问题原创 2023-11-15 11:50:48 · 456 阅读 · 0 评论 -
【OpenCV】用数组给Mat图像赋值,单/双/三通道 Mat赋值
而是每个像素填满两个通道,剩余的像素直接由系统给的值填充了。(下面每个方格代表一个像素)而是每个像素填满三个通道,剩余的像素直接由系统给的值填充了。(下面每个方格代表一个像素)可以用看到,赋值的9个数据,并没有按照我们我们给的数组一样,分给每个像素。可以用看到,赋值的9个数据,并没有按照我们我们给的数组一样,分给每个像素。m2,m3可以看到,int和flaot 一样占32位,m1.m2,m3输出。原创 2023-11-09 19:37:51 · 1644 阅读 · 0 评论 -
【OpenCV】Mat矩阵解析 Mat类赋值,单/双/三通道 Mat赋值
/ OpenCV replaces 1 with Scalar(1,0,0)相当于每个像素的第一个通道为1,其余两个通道为0;而是每个像素填满两个通道,剩余的像素直接由系统给的值填充了。而是每个像素填满三个通道,剩余的像素直接由系统给的值填充了。//相当于创建一张黑色的图,每个像素的每个通道都为0,Scalar(0,0,0);可以用看到,赋值的9个数据,并没有按照我们我们给的数组一样,分给每个像素。可以用看到,赋值的9个数据,并没有按照我们我们给的数组一样,分给每个像素。m1.m2,m3输出。原创 2023-11-09 19:35:28 · 1907 阅读 · 0 评论 -
【OpenCV】 拟合直线 与 霍夫直线 对比 , fitLine()与 HoughLinesP()对比
拟合线和圆,是通过已知点拟合出对应的方程,拟合方法如最小二乘法,RANSAC算法等。如果拟合点的离散成都较高,拟合方法的正确选择,是提高识别精度的一大要点。原创 2023-11-08 14:49:19 · 1025 阅读 · 0 评论 -
【Opencv】 Mat与vector互转 数据类型转换 --Mat与Vector<Point2f>
使用Mat存储数据,并读取相应元素。将数组内容传递给Mat。转载 2023-11-07 20:31:18 · 988 阅读 · 0 评论 -
OpenCV 概念、整体架构、各模块主要功能
在目录下,会发现上述文件夹中有个名为的 hpp 文件,里面存放的是OpenCV 中与新模块构造相关的说明代码,打开可以发现其定义的是 OpenCV 所有组件的宏,具体如下。/**/工程文件包含路径为下面就是 OpenCV 的所有模块, 按照宏定义的顺序依次介绍。原创 2023-09-29 15:59:15 · 734 阅读 · 0 评论 -
C++ Opencv4.5.5 多边形拟合 findContours()检测物体轮廓 (三角形、圆形、四边形、五边形、六边形、星形)
*** findContours 检测出物体轮廓* image 单通道图像矩阵,可以是灰度图,但更常用的是二值图像,一般是经过Canny、拉普拉斯等边缘检测算子处理过的二值图像;* contours 定义为“vector contours”,是一个向量,并且是一个双重向量,向量内每个元素保存了一组由连续的Point点构成的点的集合的向量,每一组Point点集就是一个轮廓。有多少轮廓,向量contours就有多少元素。原创 2023-09-12 20:55:21 · 695 阅读 · 0 评论 -
质心、形心、重心的区别 联系 ?
面的形心就是截面图形的几何中心,质心是针对实物体而言的,而形心是针对抽象几何体而言的,对于密度均匀的实物体,质心和形心重合。与重心不同的是,质心不一定要在有重力场的系统中。除非重力场是均匀的,否则同一物质系统的质心与重心通常不在同一假想点上。(只与物体的几何形状和尺寸有关,与组成该物体的物质无关)。一般情况下重心和形心是不重合的,只有物体是由同一种均质材料构成时,重心和形心才重合。1、重心:物体的重力的合力作用点称为物体的重心。质心与形心以及重心的区别主要体现在三者各自关联的内容不同。原创 2023-09-12 20:36:28 · 6484 阅读 · 0 评论 -
opencv 轮廓查找findContours() 求轮廓的面积、周长、几何矩、质心、凸包、最小外接圆、最小外接三角形、最小外接椭圆、最小外接矩形、最大外接矩形、多边形逼近
轮廓面积轮廓周长轮廓几何矩、质心轮廓的最大外接矩形轮廓的凸包轮廓的最小外接矩形轮廓的最小外接三角形轮廓的最小外接椭圆轮廓的多边形逼近轮廓的最小外接圆。原创 2023-09-11 21:02:46 · 475 阅读 · 0 评论 -
OpenCV4通过findContours找到指定轮廓后用drawContours填充制作掩膜
【代码】OpenCV4通过findContours找到指定轮廓后用drawContours填充制作掩膜。转载 2023-09-04 20:08:12 · 369 阅读 · 0 评论 -
opencv C++ 摄像头或视频中的人脸跟踪(人脸+人眼)
opencv C++ 摄像头或视频中的人脸跟踪(人脸+人眼)原创 2023-06-27 16:16:59 · 690 阅读 · 0 评论