c++opencv图像处理
文章平均质量分 53
AI炮灰
这个作者很懒,什么都没留下…
展开
-
C++执行程序计时函数详解
通常计时函数主要有两个,分别是getTickCount()和getTickFrequency().原创 2023-08-09 09:14:55 · 1307 阅读 · 0 评论 -
C++和OpenCV从基础到实战视频课程“开讲了”
由于市面上的书本或者视频、博客等大多是以Python为基础进行OpenCV讲解,以这种方式的目的主要是Python的语言较为简单、上手容易。但是在工业上大多数图像处理都是基于C++进行开发,这样在真正步入企业的时候大多数人对C++都很茫然(本人就是),因此本人准备开设一个基于C++和OpenCV的课程。原创 2023-05-10 09:04:32 · 198 阅读 · 0 评论 -
C++OpenCV实现二值化图像轮廓区域不连接没有闭合
【代码】C++OpenCV实现二值化图像轮廓区域不连接没有闭合。原创 2023-04-19 09:58:43 · 1150 阅读 · 0 评论 -
吊打高斯模糊的stackBlur加入OpenCV
Stackblur的坑是2021年初老瓦给我挖的。当时我找他,说我想从事OpenCV开发,有啥事情可以干的吗?老瓦说可以尝试增加一个新滤波器stackblur。当时做了有半个月,终于把代码在OpenCV上调通并且能产生正确模糊的结果,但是卡在了速度优化上。最近在优化OpenCV的DNN模块,也学会了一些并行加速的技巧又花了两周时间终于把坑填上了。原创 2023-01-10 10:22:16 · 967 阅读 · 0 评论 -
C++OpenCV凸包检测实战
1.概述凸包作为计算几何入门必学的知识非常重要,那么什么是凸包呢?凸包的定义可以理解为给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。在找凸包的时候需要使用向量,因为两向量的叉积的正负可以判断两个向量所处的方位。向量以及相应的操作建议写成结构体的形式封装起来,包括运算符重载。2.实现流程先将图像转化为灰度图像 转为二值图像 找到图像全部轮廓点 使用凸包API从全部轮廓点中找到最优轮廓点 连接凸包轮廓点3.完整实验程序#include&原创 2022-05-28 00:44:06 · 1016 阅读 · 0 评论 -
10分钟学会C++OpenCV图像处理
1.读取视频数据和摄像头数据1.1读取视频数据#include<iostream>#include<opencv2/highgui.hpp>#include<opencv2/imgcodecs.hpp>#include<opencv2/opencv.hpp>using namespace cv;using namespace std;/* 读取视频数据*/void main(){ string path = "F:/test原创 2022-05-24 12:16:16 · 1058 阅读 · 5 评论 -
C++OpenCV调用摄像头,图像的实时处理基础
#include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;int main(int argc, char** argv){ VideoCapture cap(0); if (!cap.isOpened()) { printf("Can not open a camera\n"); return -1; } while (true) {.原创 2022-05-11 19:21:58 · 2744 阅读 · 0 评论 -
C++OpenCV利用鼠标事件选取ROI区域
#include <iostream>#include "opencv2/core/core.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"using namespace std;using namespace cv;bool draw;Mat src;//原始图像 Mat roi;//ROI图像Point cursor;//初始坐标 Rect rec.原创 2022-05-11 19:19:45 · 1691 阅读 · 12 评论 -
C++OpenCV读取视频数据和摄像头数据
废话不多说直接上代码了,因为比较简单:1.读取视频数据#include<iostream>#include<opencv2/highgui.hpp>#include<opencv2/imgcodecs.hpp>#include<opencv2/opencv.hpp>using namespace cv;using namespace std;/* 读取视频数据*/void main(){ string path = "F:/原创 2022-04-25 21:32:22 · 6365 阅读 · 0 评论 -
图像特征提取(1)——Harris角点检测
1.概述角点通常是目标轮廓上曲率的局部极大值,对掌握目标的轮廓特征具有决定性作用。通常认为角点是二维图像亮度变化剧烈的点,或两条线的交叉处。角点是一种局部特征,角落上的可区分性特别强,边缘次之,平滑区域则基本没有区分性,因此也不是重要的特征。...原创 2022-04-25 16:10:30 · 800 阅读 · 0 评论 -
C++OpenCV系统学习(19)——轮廓周围绘制矩形和圆形框
1.轮廓周围绘制矩形和园1.1绘制矩形和圆概述 在图像外侧绘制最小矩形。基于RDP算法实现,目的是减少多边形轮廓的点数,加快运算效率,对图像轮廓点拟合多边形;该函数用另一条曲线或具有较少顶点的多边形逼近曲线或多边形,使它们之间的距离小于或等于指定的精度;1.2绘制矩形APIvoid approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed) ...原创 2022-04-25 14:24:24 · 5121 阅读 · 2 评论 -
3DAOI原理及编程手册(1)——工作原理
1.3DAOI工作原理 矩子 3D AOI 采用 2D 和 3D 技术相结合的方式, 在保留原有二维成像、 图像分析、 检测能力等的同时, 进一步加入了数字投影测量技术用于高度的测算。针对以上特点, 本章在描述矩子 3D AOI 工作原理时, 将兼顾二维和三维两部分。 包括二维的成像原理、 检查原理, 三维的测算原理, 以及坐标系的定位方式。这些作为本设备最基础和最核心的部分, 对于了解和掌握软件的编程有着重要的作用1.1二维成像原理1.1.1 照...原创 2021-08-04 09:47:24 · 4770 阅读 · 0 评论 -
C++OpenCV绘制直方图
1.直方图概述直方图是变量分布的统计图,他可以让我们能够了解数据的密度估计和概率分布。2.原理理解首先创建三个矩阵来处理每个输入图像通道。并用split来对通道分离,如下所示:vector<Mat> bgr;split(image, bgr);然后定义直方图的区间数:int numbins = 256;定义变量范围,并创建3个矩阵来存储每个直方图float range[] = { 0, 256 };const float* histRange = { r原创 2022-04-12 15:01:39 · 2738 阅读 · 0 评论 -
C++OpenCV读取视频文件和调用摄像头操作
我们通常需要对视频进行处理,视频数据的获取主要有两种方式:1.导入视频数据进行处理# 先实例化再初始化VideoCapture capture;capture.open("D:/test/video.mp4");if(!capture.isOpened()){ cout<<"视频文件未找到..."<<endl; return -1;}也可以实例化和初始化一起:VideoCapture capture("vedio.mp4")2.调原创 2022-04-11 20:28:17 · 5613 阅读 · 0 评论 -
C++OpenCV利用Trackbar实现对图片的滑动阈值调节
代码如下所:#include <opencv2/opencv.hpp>#include <iostream>#include"myApi.h"using namespace std;using namespace cv;Mat g_srcImg; //原图片Mat g_beautyFgImg; //美颜后的前景图Mat g_vagueBeImg; //模糊后背景图Mat g_roiImg; //前景和后景组合后图片Mat g_rectImg; //原创 2022-04-06 17:29:14 · 2304 阅读 · 0 评论 -
C++OpenCV系统学习(13)——凸包(Convex Hull)
1.概述1.1凸包概念原创 2021-09-20 11:14:53 · 1690 阅读 · 0 评论 -
C++OpenCV系统学习(18)——图像分割方法总结
1.图像分割概述图像分割指根据灰度、纹理、形状等特征把图像分割为若干个互不交叠的区域,并使图像在同一区域内呈现出相似性,在不同区域内呈现明显的差异性。基于阈值 基于区域 基于边缘 基于小波变换 基于神经网络 基于能量 基于概率统计 基于特定理论1.基于阈值的分割 基本思想:给定合适的灰度阈值,将图像中各个像素的灰度值和阈值作比较,将每个像素划分到合适的类别中。 优点:思想简单、运算效率高(并行区域技术) 难点:图像结构复杂时很难找到...转载 2021-09-19 15:44:28 · 2082 阅读 · 0 评论 -
C++OpenCV系统学习(17)——图像分割与抠图(6)——视频背景替换
1.关键知识点分割算法选择 背景融合-高斯模糊 遮罩层生成1.1分割算法的选择GMM/Kmeans:对视频的第一帧做trainning,对其他帧只做预言不做trainning。 .基于色彩的处理方式 RGB与HSV空间 最终看哪个方法失效更好。对视频的第一帧做trainning,对其他帧只做预言不做trainning。1.2知识点补充1.2.1概括 HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在...原创 2021-09-19 15:32:14 · 879 阅读 · 0 评论 -
C++OpenCV系统学习(17)——图像分割与抠图(5)证件照背景替换
关键的知识点:K-means 背景融合-高斯模糊 遮罩层生成算法的流程: 吧v原创 2021-09-19 09:47:28 · 1239 阅读 · 2 评论 -
python+opencv实现文字颜色识别与标定
最近接了一个比较简单的图像处理的单子,花了一点时间随便写了一下:数据集客户没有是自己随便创建的:程序如下:""" Code creation time:September 11, 2021 Author:PanBo Realize function:It mainly realizes the recognition and calibration of fonts with different colors"""import numpy a...原创 2021-09-12 20:22:44 · 3725 阅读 · 6 评论 -
C++OpenCV系统学习(17)——图像分割与抠图(4)Grabcut
1.Grabcut介绍1.1Grabcut概述 Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation)、立体视觉(stereo vision)、抠图(Image matting)等。此类方法把图像分割问题与图的最小割(min cut)问题相关联。OpenCV中的GrabCut该算法利用了图像中的纹理(颜色)信息和边界(反差)信息,只要少量的用户交互操作即可得到比较好的分割结果.1....原创 2021-09-10 10:19:22 · 4283 阅读 · 2 评论 -
C++OpenCV系统学习(16)——图像分割与抠图(3)分水岭算法
在图像分割与抠图(1)和(2)中说到的图像分割的方式都是机器学习的方法,分水岭算法是基于图像图像形态学和结构的方法来进行图像的分割。基于机器学习的方式本质是通过概率统计与建模,通过数学的方式对图像进行分割与分类。分水岭算法是通过图像本身的特征对图像进行分割与分类。1.分水岭算法概述1.1.分水岭算法的理解分水岭(Watershed)是基于地理形态的分析的图像分割算法,模仿地理结构(比如山川、沟壑,盆地)来实现对不同物体的分类。分水岭算法中会用到一个重要的概念——测...原创 2021-09-07 16:30:21 · 4309 阅读 · 1 评论 -
C++OpenCV系统学习(15)——图像分割与抠图(2)GMM
1.GMM(高斯混合模型)1.1GMM概述1GMM与K-means相比较属于软分类 实现的方法是期望最大化(E-M算法) 停止的条件:达到收敛 主要分为两个步骤:训练与预言1.2原理讲解高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一类分布但参数不一样,或者是不同类型的分布,比如正态分布和伯努利分布)。...原创 2021-09-06 22:39:41 · 1741 阅读 · 3 评论 -
C++OpenCV系统学习(14)——图像分割与抠图(1)_KMeans
目录1.概述1.1K-means方法1.2基本流程2.K-means图像分割2.1图像分割2.2K-means算法原理2.3实验案例1.概述图像分割主要有四种方法:K-means和GMM是基于聚类的方式进行图像分割,分水岭方法是基于图像的拓扑结构进行图像分割的,还有GrabCut是基于交互方式的图像分割与抠图的方法。1.1K-means方法K-means是无监督学习方法,对于分类问题需要输入分类数目,初始化中心位置。对于硬分类问题,以距离度量。主要用...原创 2021-09-06 20:09:54 · 2529 阅读 · 0 评论 -
C++OpenCV系统学习(12)——轮廓发现(find contour)
目录1.概述1.1轮廓发现概念1.2相关API2.API参数解释2.1.轮廓发现2.2绘制轮廓2.3 实现步骤3.实验示例1.概述1.1轮廓发现概念轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现的结果1.2相关APIfindContours()发现轮廓drawContours()绘制轮廓2.API参数解释2.1.轮廓发现2.2绘制轮廓2.3 实现步骤 输入图像转为灰度...原创 2021-09-04 19:05:37 · 1595 阅读 · 0 评论 -
C++OpenCV系统学习(11)——直方图、均衡化、直方图计算、直方图比较、直方图方向投影
1.概念1.1直方图概念1.2直方图均衡化概念图像直方图均衡化的实现:直方图均衡化API:直方图均衡化案例void MyApi::histogramEqualize(Mat& image){ Mat gray_image,dst; cvtColor(image, gray_image, COLOR_BGR2GRAY); imshow("灰度图", gray_image); equalizeHist(gray_image, dst); imsho...原创 2021-08-29 16:42:53 · 2272 阅读 · 3 评论 -
C++OpenCV系统学习(10)——像素重映射
1.像素重映射的概念 void update_map(Mat& image, int index)//变化的函数{ Mat map_x, map_y;//map_x, map_y表示x,y的映射表 map_x.create(image.size(), CV_32FC1); map_y.create(image.size(), CV_32FC1); for (int row = 0; row < image.rows; ...原创 2021-08-26 17:44:03 · 309 阅读 · 0 评论 -
C++OpenCV系统学习(9)——霍夫变换
1.霍夫直线变换1.1概述Hough Line Transform用来做直线检测,前提条件是边缘检测已经完成(Canny边缘检测),它是由平面空间到极坐标空间转换。1.2霍夫直线变换原理 他是通过把图像上的所有像素点都变成极坐标空间,然后形成一条一条的曲线,如果所有的曲线都相交在一个点,那么这个点对应的和r值就表示直线的角度。这就说明在屏幕坐标上的直线,在极坐标空间找到了,我们拿到了和r重新反算到平面空间。1.3补充 对于任意一条直线上的所有点来说,...原创 2021-08-25 19:01:51 · 2285 阅读 · 9 评论 -
VS2019+opencv配置方法
这篇博客比较详细大家可以参考,有问题可以给我留言https://blog.csdn.net/qq321772514/article/details/90514538原创 2021-08-20 15:57:04 · 132 阅读 · 0 评论 -
C++opencv图像处理系统学习的接口API
MyApi.h#pragma once#include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;class MyApi {public: void improve_image_contrast(Mat& image);//提高图像的对比度 void filter2DAPI(Mat& image);//调用提高对比度的API也同..原创 2021-08-17 13:08:03 · 824 阅读 · 0 评论 -
c++和opencv针对图像处理的API接口直接调用即可
都是自己辛辛苦苦编写的,转载注意备注quickopencv.h#pragma once#include<opencv2/opencv.hpp>using namespace cv;typedef unsigned char BYTE;class QuickDemo {public: //输入一张图,就会完成一系列的Demo操作 void colorSpace_Demo(Mat &image); void pixel_visit_demo(Mat &原创 2021-08-17 13:04:42 · 1266 阅读 · 2 评论 -
一张大PCB图像对每个小引脚通过亮度和RGB进行定位引脚头和尾部
要求描述:通过亮度和颜色的设定标示出引脚根部(本体) 部分 通过亮度和颜色的设定标示出引脚部分 通过亮度和颜色的设定标示出焊锡部分原图为:选取的ROI区域:灰度图:通过亮度和颜色的设定标示出引脚根部(本体) 部分通过亮度和颜色的设定标示出引脚部分通过亮度和颜色的设定标示出焊锡部分(引脚的头和尾)代码:主函数test.cpp为:#include<opencv2/opencv.hpp>#include<iostrea...原创 2021-08-05 15:50:16 · 276 阅读 · 2 评论 -
C++OpenCV系统学习(7)——图像阈值操作、线性滤波
1.概念1.1图像阈值(threshold)阈值简单的来说就是图像分割的标尺,这个标尺是如何产生的,阈值的产生算法是什么,阈值类型?1.2阈值类型——阈值二值化(threshold binary)左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值1.3 阈值类型——截断(truncate)左下方的图表示图像像素点Src(x,y)值的分布情况,蓝色水平线表示阈值1.4阈值类型——阈值取零(threshold to zero)左下方的图表示图像像素..原创 2021-08-04 08:19:46 · 1021 阅读 · 0 评论 -
C++OpenCV系统学习(6)——图像金字塔上采样和降采样、角点检测
目录1.概念1.1图像金字塔的概念1.2高斯金字塔1.2.1高斯金字塔1.2.2采样相关API1.2.3代码演示1.2.4高斯不同DOG案例2.补充1.概念1.1图像金字塔的概念我们在图像处理中常常会调整图像的大小,最常见的就是方法(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像分放大和缩小,但是这里我们介绍图像金字塔 一个图像金字塔式一系列图片组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就像是一个古埃及.原创 2021-08-03 12:44:48 · 1004 阅读 · 2 评论 -
C++OpenCV系统学习(5)——形态学应用提取水平与垂直线
1.原理方法图像形态学操作的时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。原创 2021-08-03 10:37:29 · 603 阅读 · 0 评论 -
对4个局部区域的红色像素画矩形(ROI区域)
由于我们一般画矩形都是通过整个图像进行遍历,如果我们选取的ROI区域很大,这样的做法时间复杂度和空间复杂度很大。基于此考虑在大的ROI区域在四个顶点选取四个小的矩形区域从而来确定大的ROI区域:测试文件:test.cpp#include<opencv2/opencv.hpp>#include<iostream>#include<fstream>#include<quickopencv.h>using namespace cv;...原创 2021-08-02 17:51:04 · 334 阅读 · 0 评论 -
C++OpenCV系统学习(5)——图像模糊
1.图像模糊1.1模糊原理Smooth/Blur是图像处理中最简单和常用的操作之一 使用操作的原因之一就是为了给图像预处理时候减低噪声 使用Smooth/Blue操作其背后是数学的卷积运算 通常这些卷积算子计算欧式线性操作,所有又叫线性滤波1.2 相关API均值模糊:blur(Mat src,Mat dst, Size(xradius,yradius),Point(-1,-1));Point(-1,-1)就是指默认正中心 高斯模糊:GaussianBlur(Mat src,..原创 2022-04-24 23:07:46 · 1934 阅读 · 0 评论 -
图像映射---实现局部ROI区域通过直方图的范围进行图像标定
描述:给一个BMP图像,两个二进制文件,二进制其实也是BMP图像,一模一样的,只是格式不一样,我们需要对二进制文件进行操作,在BMP图像上进行标记。具体是选取一个ROI区域在二进制文件中绘制直方图,选取前10%的直方图区域,在BMP图像文件进行映射和标记出来。主文件:#include<opencv2/opencv.hpp>#include<iostream>#include<fstream>#include<quickopencv.h>usi原创 2021-07-31 15:15:31 · 464 阅读 · 0 评论 -
C++OpenCV系统学习(4)——绘制形状与文字
1.绘制形状 使用cv::Point与cv::ScalarPoint表示2D平面上一个点x,yPoint p;p.x=10;p.y=8;//或者p=Point(10,8);Scalar表示四个元素的向量Scalar(a,b,c)//a=blue,b=green,c=red表示三通道2.绘制形状的API画线:cv::line(LINE_4\LINE_\LINE_AA) 画椭圆:cv::eclipse 画矩形:cv::rectangle 画圆:c...原创 2021-07-30 16:32:32 · 308 阅读 · 1 评论 -
C++OpenCV系统学习(3)——图像混合、调整亮度与对比度
1.图像混合1.1线性混合f0和f1分别表示两张图像,g(x)是混合后的图像、1.2相关APIaddWeight(src1,alpha,src2,beta,gamma,dst,dtype),注意要求两个图像的大小以及类型必须一致才可以混合。2.图像变换——亮度和对比度调节2.1概述图像变换可以看作如下:像素变换——点操作 邻域操作——区域(卷积或者特征提取)调整亮度和对比度属于像素变换-点操作2.2重要的APIMat new_image = Ma...原创 2021-07-30 15:36:18 · 546 阅读 · 0 评论