OpenCV C++
文章平均质量分 53
以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 · 20044 阅读 · 8 评论 -
【OpenCV C++】照片修改像素(尺寸大小)
照片改变像素(尺寸大小)问题描述语言运行环境代码运行结果照片换底参照 https://editor.csdn.net/md/?articleId=112390095问题描述一张照片修改为任意指定的像素(尺寸、分辨率、宽高)下面将一张分辨率415615的照片,改为358441语言C++运行环境VS2019OpenCV 4.20代码#include <opencv2/opencv.hpp>#include <iostream>using namespace原创 2021-01-09 16:18:20 · 7624 阅读 · 0 评论 -
[OpenCV C++] matchTemplate 模板匹配,设置阈值来筛选匹配结果,判断匹配是否成功
为了解决这个问题,可以通过设置阈值来筛选匹配结果,只有当匹配度高于某个阈值时,才认为匹配成功。如果匹配度低于阈值,将其视为匹配失败,并给出相应的提示。在 OpenCV 中,matchTemplate 函数是用于模板匹配的,它会在图像中寻找与给定模板最相似的区域。但是,即使没有正确匹配到目标,matchTemplate 函数也会返回一个结果,这会导致错误出现。原创 2024-03-27 19:53:37 · 104 阅读 · 0 评论 -
【C++】将坐标点写入到txtx文本,将坐标点写入到 excel表格
有自动以坐标点,需要存储。原创 2024-03-20 14:46:13 · 84 阅读 · 0 评论 -
【OpenCV C++】找到图像中最亮的区域中心,求该区域ROI的平均亮度
【代码】【OpenCV C++】找到图像中最亮的区域中心,求该区域的平均亮度。原创 2024-03-18 08:48:00 · 216 阅读 · 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 · 198 阅读 · 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 · 233 阅读 · 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 · 172 阅读 · 0 评论 -
相机内参外参(Intrinsics & Extrinsics) 与 相机标定参数
深入解读相机矩阵一文带你搞懂相机内参外参(Intrinsics & Extrinsics)相机内参我们通常所说的相机内参是4个,分别为:fx、fy、u0、v0;u0,v0表示图像的中心像素坐标和图像原点像素坐标之间相差的横向和纵向像素数。理论值应该是图像宽度、高度的一半,但实际是有偏差的,一般越好的摄像头则其越接近于分辨率的一半;1、旋转矩阵:描述了世界坐标系的坐标轴相对于摄像机坐标轴的方向2、平移矩阵:描述了在摄像机坐标系下,空间原点的位置原创 2022-12-07 15:34:49 · 1376 阅读 · 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 · 2139 阅读 · 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 · 908 阅读 · 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 · 909 阅读 · 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 · 509 阅读 · 0 评论 -
VS编译器的使用——VS2019新建控制台工程
VS编译器的使用——VS2019新建控制台工程转载 2023-11-20 09:32:40 · 94 阅读 · 0 评论 -
OpenCV C++ 图像 批处理 (批量调整尺寸、批量重命名)
拿着棋盘格,对着相机变换不同的方角度,采集十张以上(以10~20张为宜);或者棋盘格放到桌上,拿着相机从不同角度一通拍摄。以棋盘格,第一个内焦点为坐标原点,便于计算世界坐标系下三维坐标;下面是**批处理(调整尺寸、重命名)**之后的结果。图片命名后,将每个图片名称写到txt文本中备用。批处理(调整尺寸、重命名) 代码实现。原创 2023-11-18 22:09:46 · 604 阅读 · 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 · 980 阅读 · 0 评论 -
opencv遇到CV_MINMAX未声明标识符问题
opencv遇到CV_MINMAX未声明标识符问题原创 2023-11-15 11:50:48 · 198 阅读 · 0 评论 -
【OpenCV】用数组给Mat图像赋值,单/双/三通道 Mat赋值
而是每个像素填满两个通道,剩余的像素直接由系统给的值填充了。(下面每个方格代表一个像素)而是每个像素填满三个通道,剩余的像素直接由系统给的值填充了。(下面每个方格代表一个像素)可以用看到,赋值的9个数据,并没有按照我们我们给的数组一样,分给每个像素。可以用看到,赋值的9个数据,并没有按照我们我们给的数组一样,分给每个像素。m2,m3可以看到,int和flaot 一样占32位,m1.m2,m3输出。原创 2023-11-09 19:37:51 · 1357 阅读 · 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 · 1531 阅读 · 0 评论 -
【OpenCV】 拟合直线 与 霍夫直线 对比 , fitLine()与 HoughLinesP()对比
拟合线和圆,是通过已知点拟合出对应的方程,拟合方法如最小二乘法,RANSAC算法等。如果拟合点的离散成都较高,拟合方法的正确选择,是提高识别精度的一大要点。原创 2023-11-08 14:49:19 · 661 阅读 · 0 评论 -
【Opencv】 Mat与vector互转 数据类型转换 --Mat与Vector<Point2f>
使用Mat存储数据,并读取相应元素。将数组内容传递给Mat。转载 2023-11-07 20:31:18 · 440 阅读 · 0 评论 -
OpenCV 概念、整体架构、各模块主要功能
在目录下,会发现上述文件夹中有个名为的 hpp 文件,里面存放的是OpenCV 中与新模块构造相关的说明代码,打开可以发现其定义的是 OpenCV 所有组件的宏,具体如下。/**/工程文件包含路径为下面就是 OpenCV 的所有模块, 按照宏定义的顺序依次介绍。原创 2023-09-29 15:59:15 · 605 阅读 · 0 评论 -
C++ Opencv4.5.5 多边形拟合 findContours()检测物体轮廓 (三角形、圆形、四边形、五边形、六边形、星形)
*** findContours 检测出物体轮廓* image 单通道图像矩阵,可以是灰度图,但更常用的是二值图像,一般是经过Canny、拉普拉斯等边缘检测算子处理过的二值图像;* contours 定义为“vector contours”,是一个向量,并且是一个双重向量,向量内每个元素保存了一组由连续的Point点构成的点的集合的向量,每一组Point点集就是一个轮廓。有多少轮廓,向量contours就有多少元素。原创 2023-09-12 20:55:21 · 446 阅读 · 0 评论 -
质心、形心、重心的区别 联系 ?
面的形心就是截面图形的几何中心,质心是针对实物体而言的,而形心是针对抽象几何体而言的,对于密度均匀的实物体,质心和形心重合。与重心不同的是,质心不一定要在有重力场的系统中。除非重力场是均匀的,否则同一物质系统的质心与重心通常不在同一假想点上。(只与物体的几何形状和尺寸有关,与组成该物体的物质无关)。一般情况下重心和形心是不重合的,只有物体是由同一种均质材料构成时,重心和形心才重合。1、重心:物体的重力的合力作用点称为物体的重心。质心与形心以及重心的区别主要体现在三者各自关联的内容不同。原创 2023-09-12 20:36:28 · 1423 阅读 · 0 评论 -
opencv 轮廓查找findContours() 求轮廓的面积、周长、几何矩、质心、凸包、最小外接圆、最小外接三角形、最小外接椭圆、最小外接矩形、最大外接矩形、多边形逼近
轮廓面积轮廓周长轮廓几何矩、质心轮廓的最大外接矩形轮廓的凸包轮廓的最小外接矩形轮廓的最小外接三角形轮廓的最小外接椭圆轮廓的多边形逼近轮廓的最小外接圆。原创 2023-09-11 21:02:46 · 179 阅读 · 0 评论 -
OpenCV4通过findContours找到指定轮廓后用drawContours填充制作掩膜
【代码】OpenCV4通过findContours找到指定轮廓后用drawContours填充制作掩膜。转载 2023-09-04 20:08:12 · 246 阅读 · 0 评论 -
opencv C++ 摄像头或视频中的人脸跟踪(人脸+人眼)
opencv C++ 摄像头或视频中的人脸跟踪(人脸+人眼)原创 2023-06-27 16:16:59 · 589 阅读 · 0 评论 -
opencv C++ 识别照片中的人脸
/识别照片中的人脸。原创 2023-06-27 16:13:21 · 1241 阅读 · 1 评论 -
OpenCV C++ 张正友相机标定【相机标定原理、相机标定流程、标定结果评价、图像畸变矫正】
R是3×3的正交单位矩阵(即旋转矩阵),t为平移向量,R、t与摄像机无关,所以称这两个参数为摄像机的外参数(extrinsicparameter),可以理解为两个坐标原点之间的距离,因其受x,y,z三个方向上的分量共同控制,所以其具有三个自由度。R是3×3的正交单位矩阵(即旋转矩阵),t为平移向量,R、t与摄像机无关,所以称这两个参数为摄像机的外参数(extrinsicparameter),可以理解为两个坐标原点之间的距离,因其受x,y,z三个方向上的分量共同控制,所以其具有三个自由度。原创 2023-06-27 16:12:47 · 1699 阅读 · 0 评论 -
opencv C++ 读取视频中的光斑是否在移动(图片存储在指定文件见下,光斑坐标存在TXT文本中)
读取视频中的光斑是否在移动(图片存储在指定文件见下,光斑坐标存在TXT文本中)原创 2023-06-27 16:07:07 · 830 阅读 · 0 评论 -
opencv C++ 模板匹配
【代码】opencv C++ 模板匹配。原创 2023-06-27 16:02:49 · 1203 阅读 · 0 评论 -
opencv C++ 输出图片中红点的坐标
【代码】opencv C++ 输出图片中红点的坐标。原创 2023-06-27 16:01:20 · 2168 阅读 · 0 评论 -
机器视觉 与 人眼错觉
原创 2023-05-05 20:10:10 · 81 阅读 · 0 评论 -
opencv C++ 人脸识别+性别判断 网络模型
首先将整幅图输入到人脸检测网络,进行人脸识别,找到图像中的人脸区域;然后,检测并扩充后的人脸作为,性别判断网络的输入,进行性别判断。当exBoundray = 25时,性别错误判断1个。当exBoundray = 10时,性别错误判断1个。当exBoundray = 20或者15时。可以看到,下图中正确的识别了人脸和性别;原创 2023-04-28 20:50:45 · 189 阅读 · 0 评论 -
opencv C++图像风格迁移 深度神经网络模型的使用
风格迁移的也是深度学习中的一个小的计算机视觉任务。目的是将A图像的风格迁移到B图像。风格的定义在在深度学习中可以认为是一些底层的特征。比如纹理特征等。原创 2023-04-28 16:31:15 · 171 阅读 · 0 评论 -
opencv c++ 目标识别 深度神经网络模型的使用
深度学习:Opencv的blobFromImage是如何工作的OpenCV minMaxLoc()函数找出图像中最小值最大值【opencv 】reshape函数详解 示例演示OpenCV中blob的概念以及OpenCV中BLOB特征提取与几何形状分类。原创 2023-04-27 21:03:39 · 260 阅读 · 0 评论 -
OpenCV中blob的概念以及OpenCV中BLOB特征提取与几何形状分类
还可以提供相关斑点间的拓扑结构。在处理过程中不是对单个像素逐一分析,而是对图像的行进行操作。图像的每一行都用游程长度编码(RLE)来表示相邻的目标范围。这种算法与基于像素的算法相比,大大提高了处理的速度。经二值化(Binary Thresholding)处理后的图像中色斑可认为是blob。直观上来看,blob特征就是一团,一坨东西,它并不一定是圆形的,总之它就是那么。(颜色的)一小片,斑点。Blob分析:(Blob Analysis)是对图像中。首先要了解,什么是blob特征,我们来看下面两幅图片。转载 2023-04-27 20:47:18 · 859 阅读 · 0 评论 -
深度学习:Opencv的blobFromImage是如何工作的
如果训练模型时图像的尺寸 与实际使用的图像尺寸不一致,需要对图像尺寸进行变换;blobFromImages()是专门对神经网络图像格式转换的函数;1. 整体像素值减去平均值(mean) 2. 通过缩放系数(scalefactor)对图片像素值进行缩放image:这个就是我们将要输入神经网络进行处理或者分类的图片。mean:需要将图片整体减去的平均值,如果我们需要对RGB图片的三个通道分别减去不同的值,那么可以使用3组平均值,如果只使用一组,那么就默认对三个通道减去一样的值。原创 2023-04-27 20:32:41 · 1041 阅读 · 0 评论 -
【opencv 】reshape函数详解 示例演示
在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数。参数比较少,但设置的时候却要千万小心。首先设置一个初始矩阵:一个20行30列1通道的一个矩阵。转载 2023-04-26 19:48:06 · 1172 阅读 · 0 评论 -
opencv (六十六) 加载深度神经网络模型
通过代码读取下面已经训练好的网络模型,下面模型文件和配置文件//加载模型 Net net = dnn :: readNet(model , config);cout原创 2023-04-25 17:19:05 · 228 阅读 · 0 评论