opencv
文章平均质量分 78
Spark!
路人
展开
-
opencv——霍夫变换—圆检测
目录原理API代码编写原理如果圆心在原点,那么 x^2 + y^2 = r^2如果圆心不在原点,那么(x - a)^2 + (y - b) ^ 2 = r^2转换为极坐标,公式如下(a,b)为圆心坐标如果我们不知道圆心的坐标,那么就可以根据圆上的点和已知的半径进行反推如下图随机找三个点,那么相同半径下,这三个圆会相交在圆心。通过rgb相加,交点的像素值会很大,看上去最亮,这个点就是原点。APIvoid HoughCircles(InputArray image, Outpu原创 2021-02-23 10:09:20 · 2530 阅读 · 0 评论 -
opencv——霍夫变换—直线检测
目录霍夫变换定义常用霍夫变换霍夫直线变换可视化讲解HoughLinesHoughLinesP代码效果霍夫变换定义霍夫变换是一种特征检测(feature extraction),被广泛应用在图像分析(imageanalysis)、计算机视觉(computer vision)以及数位影像处理(digital image processing)。霍夫变换是用来辨别找出物件中的特征,其流程大致如下:给定一个物件、要辨别的形状的种类,算法会在参数空间(parameter space)中执行投票来决定原创 2021-01-21 18:31:40 · 888 阅读 · 0 评论 -
opencv——canny算子与边缘检测
目录边缘检测边缘检测算子Canny算子图像平滑灰度转化图像梯度非最大抑制双阈值求可能边边界跟踪API代码结果边缘检测我们抠图的过程其实就是找图像中某个实例(例如人)的边缘的过程,所以,我们的边缘检测,其实就是检测图像中的实例的边缘。那现在就有一个问题了,我们人是怎么区分边缘的呢?我们发现,每一个实例,它的边缘跟其周围的像素差距一般是比较大的。我们的抠图,就是根据明显的像素差距,来区分实例的边缘。所以抠图的根据,就是图像像素的明显变化。图像的边缘,一般都是图像上像素有明显变化的位置。那我们用一原创 2021-01-21 13:27:56 · 1278 阅读 · 0 评论 -
opencv——Laplance算子
目录拉普拉斯算子原理处理流程代码效果拉普拉斯算子原理如上图,在画圈处有明显的像素值变化,这就是图像中的边缘上图,是图像像素的变化图圆圈处就是和源图像对应的点。可以看出,这里的变化率是最大的变化率也称梯度谈及变化率,我们就要想到导数如右图而变化率(梯度)的最大值,就是一阶微分的极值一阶微分的极值,就是二阶微分的零值点如下图我们先看一下离散的一阶导数计算方法二阶导数就是一阶导数的导数:因为图像有行列两个方向,所以要两个方向分别求导数:x方向偏导数、y方向偏导数,合起来就原创 2021-01-20 18:28:46 · 339 阅读 · 0 评论 -
opencv——Sobel算子与Scharr算子
目录算子边缘提取与梯度边缘提取Sobel算子原理API代码展示结果优化代码结果Scharr算子代码结果算子狭义的算子实际上是指从一个函数空间到另一个函数空间(或它自身)的映射。广义的算子的定义只要把上面的空间推广到一般空间,可以是向量空间,赋范向量空间,内积空间,或更进一步,Banach空间,Hilbert空间都可以。算子还可分为有界的与无界的,线性的与非线性的等等类别。边缘提取与梯度如上图,在画圈处有明显的像素值变化,这就是图像中的边缘上图,是图像像素的变化图圆圈处就是和原创 2021-01-20 16:11:04 · 697 阅读 · 0 评论 -
opencv——边缘处理
目录为什么要用边缘处理默认边缘处理自定义边缘处理API为什么要用边缘处理如果kernel是3 x 3,那么图片周围一圈像素是扫不到的。如果kernel是(2k+1)x (2k+1),那么图片周围k圈像素扫不到。如下图5 x 5的kernel能扫到的最大的面积就是以红框为边界的面积图像周围2像素没有办法扫到于是我们要处理图像周围2像素的边缘在有的算法里是在原图像周围添加2像素,卷积后再去除默认边缘处理opencv中对边界的处理方法在卷积开始之前增加边缘像素,填充的像素值为0或者RG原创 2021-01-20 09:12:47 · 1340 阅读 · 2 评论 -
opencv——自定义线性滤波
目录知识储备常见算子(卷积核)Robert算子Sobel算子Laplance算子自定义线性滤波API代码效果知识储备在学习自定义线性滤波前,需要了解卷积的相关概念图像中的卷积常见算子(卷积核)Robert算子最常见的算子Sobel算子在边缘检测中经常用到,是canny边缘检测中重要的一步,通过Sobel算子得到梯度Laplance算子锐化的掩膜中间是5,拉普拉斯算子中间是4拉普拉斯算子和Sobel算子被用来寻找梯度、寻找图像的边缘自定义线性滤波和掩膜其实是一样的,只是用的核不原创 2021-01-19 09:57:30 · 195 阅读 · 0 评论 -
opencv——基本阈值操作
目录图像阈值(threshold)阈值有哪些阈值二值化阈值反二值化截断阈值取零阈值反取零总结API代码展示效果总结图像阈值(threshold)阈的意思是界限,那阈值就是界限值。比如一堆苹果,直径大于7厘米算合格,小于7厘米不合格考试成绩,分数大于60算及格,分数小于60不及格通过上面这种分类,我们将所有的变量分成两个类别,分类的标准,也就是界限,就是阈值。阈值有哪些(1)阈值二值化(threshold binary)。(2)阈值反二值化(threshold binary I原创 2021-01-18 21:39:57 · 1055 阅读 · 0 评论 -
opencv——上采样与降采样
目录图像金字塔为什么要使用图像金字塔上采样与降采样高斯金字塔高斯不同拉普拉斯金字塔相关API上采样降采样上采样与降采样代码实现代码效果先降采样再上采样代码实现高斯不同代码实现图像金字塔这个也可以看做金字塔,如果我们把一个小方格当成一个二值图像的像素,那么我们可以从最底层变到最高层,也可以从最高层变到最底层。那如果这是一个图像的话,从上往下,我们就实现了图像的放大,从下往上就实现了图像的缩小。这就想金字塔一样,是四棱锥一个图像金字塔就是一系列的图像组成。最下方是尺寸最大,最上方是尺寸最小。为什么原创 2021-01-18 16:33:52 · 2123 阅读 · 0 评论 -
opencv——形态学应用—提取识别码中的文字
目录原理API代码效果原理膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值膨胀会使白色膨胀,黑色缩小腐蚀会使白色缩小,黑色膨胀这是基于原理的,在kernel扫的时候,膨胀是将锚点替换为区域内最大值,腐蚀是将锚点替换为区域内最小值最大值255是白色,最小值0是黑色开操作:先腐蚀后膨胀闭操作:先膨胀后腐蚀开操作先腐蚀,将黑色的杂点去除,后膨胀,黑色的大块恢复原状。闭操作先膨胀,将白色的杂点去除,后膨胀,白色的大块恢复原原创 2021-01-18 10:36:44 · 352 阅读 · 0 评论 -
opencv——形态学应用—提取提取水平与垂直线
目录原理方法结构元素提取步骤相关API代码现象原理方法图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用两个最基本的形态学操作 – 膨胀与腐蚀,使用不同的结构元素实现对输入图像的操作、得到想要的结果。膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值比如开操作,先腐蚀后膨胀,将白色的小块去掉了结构元素膨胀与腐蚀过程可以使用原创 2021-01-18 09:52:59 · 392 阅读 · 0 评论 -
opencv——形态学中滑块的应用(trackbar)
目录滑动条用于kernelAPI代码效果滑动条用于类型代码效果滑动条用于kernel之前,我们每次使用形态学操作,需要设置核,核的大小需要我们自己设置,每次想要调整,都是需要不断停止运行,修改代码,然后再执行,这样太慢了,我们能不能运行的过程中,通过调整滑动条,让它自动调整核的大小呢?opencv提供了trackbar功能。我们可以创建一个trackbar来动态调整核的大小,这样,我们就不用每次都重新修改代码,重新编译了。创建trackbar的API是createTrackbar()APIin原创 2021-01-17 20:05:26 · 804 阅读 · 0 评论 -
opencv——形态学操作(开闭操作、形态学梯度、顶帽与黑帽)
目录形态学操作开操作闭操作形态学梯度顶帽黑帽顶帽黑帽结论opencv中形态学操作核生成API形态学操作API代码效果形态学操作(1)开操作:先腐蚀后膨胀,可以去掉小的对象。(2)闭操作:先膨胀后腐蚀,可以填充小对象。(3)形态学梯度:膨胀减去腐蚀。(4)顶帽:顶帽是原图像与开操作图像之间的差值图像。(5)黑帽:黑帽是闭操作图像与原图像之间的差值图像。这几个形态学操作都是基于腐蚀和膨胀的腐蚀:锚点替换为最小值;黑色增加白色减少膨胀:锚点替换为最大值;白色增加黑色减少开操作&n原创 2021-01-16 16:52:23 · 855 阅读 · 0 评论 -
opencv——形态学基本操作(腐蚀与膨胀)
目录形态学操作形态学操作的分类kernel生成API膨胀原理API代码效果腐蚀原理API代码效果形态学操作 形态学操作本身是图像处理要研究的内容,而计算机视觉要实现相关功能,也要实现图像的处理。在图像处理技术中,有一些的操作会对图像的形态发生改变,这些操作一般称之为形态学操作。 讲的再专业一些:图像形态学操作是基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学。形态学操作的分类两个基本操作:(1)膨胀:跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面原创 2021-01-16 11:23:57 · 1525 阅读 · 0 评论 -
opencv——椒盐噪声添加与去除
目录代码效果常见噪声及产生原因代码#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;//添加椒盐噪声Mat addSaltNoise(Mat srcImage, int n){ Mat resultImage = srcImage.clone(); for (int k = 0; k < n; k++) { //随机取行列值原创 2021-01-15 14:31:40 · 957 阅读 · 0 评论 -
常见图像噪声及产生原因(高斯、泊松和椒盐噪声)
目录什么是图像噪声噪声来源常见噪声高斯噪声泊松噪声乘性噪声椒盐噪声信噪比什么是图像噪声 噪声在图像上常表现为一引起较强视觉效果的孤立像素点或像素块。一般,噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息。通俗的说就是噪声让图像不清楚。噪声来源(1)图像获取过程中两种常用类型的图像传感器CCD和CMOS采集图像过程中,由于受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声,如电阻引起的热噪声、场效应管的沟道热噪声、光子噪声、暗电流噪声、光响应非原创 2021-01-15 14:20:10 · 25657 阅读 · 0 评论 -
opencv——非线性滤波原理及操作
目录中值滤波——medianBulrAPI代码效果双边滤波——bilateralFilterAPI代码效果opencv中最常用的两种非线性滤波为中值滤波和双边滤波中值滤波——medianBulr中值滤波很简单,就是某个区域里面的中值,将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.。这个区域是一个正方形区域,并且正方形的边长即区域的行数和列数都为奇数。中值对椒盐噪声有很好的抑制作用。APIvoid medianBlur( InputArray src, Out原创 2021-01-15 13:48:39 · 277 阅读 · 0 评论 -
opencv——线性滤波原理及操作(方框滤波、均值滤波、高斯滤波)
目录原理卷积图像模糊原理方框滤波均值滤波(归一化盒子滤波)高斯滤波高斯核(掩膜)高斯滤波计算高斯滤波步骤相关函数方框滤波——boxblur代码效果均值滤波——blur代码效果高斯滤波——GaussianBlur代码效果原理Smooth/Blur 是图像处理中最简单和常用的操作之一使用该操作的原因之一就为了给图像预处理时候减低噪声使用Smooth/Blur操作其背后是数学的卷积计算通常这些卷积算子计算都是线性操作,所以又叫线性滤波卷积如何理解卷积假设有6x6的图像像素点原创 2021-01-14 20:51:31 · 1965 阅读 · 0 评论 -
opencv——图像的线性滤波与非线性滤波
目录图像滤波定义目的分类线性滤波器线性滤波器的分类模糊与锐化图像滤波包括尽量保留图像细节特征的条件下对目标图像的噪声进行抑制图像滤波定义对于图像的滤波定义如下图像滤波,即在图像滤波包括尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。目的(1)对图像进行降噪处理;(2)提取图像中物体的特征。分类图像滤波包括线性滤波与非线性滤波(1)线性滤波:方框滤波、均值滤波、高斯滤波;(2)非线原创 2021-01-14 19:46:27 · 1296 阅读 · 0 评论 -
opencv——图像中的卷积
目录卷积什么是卷积卷积的数学原理连续数据的卷积离散数据的卷积掩膜卷积什么是卷积卷积本身是一个数学概念,但是更多的,我们经常会在深度学习听到:卷积神经网络。但真正研究核心神经网络的人会发现,其实研究的就是数学。除了在深度学习中,在计算机视觉中,卷积也会经常见到,它常用于图像处理。卷积的数学原理首先我们先来看一下卷积的定义:在泛函分析中,卷积、旋积或摺积(英语:Convolution)是通过两个函数f 和g 生成第三个函数的一种数学算子,表征函数f与g经过翻转和平移的重叠部分函数值乘积对重叠长度的原创 2021-01-14 15:40:34 · 996 阅读 · 0 评论 -
opencv——随机绘制
目录RNGAPI代码效果RNG产生随机数是编程中经常用到的操作,特别在进行初始化的时候需要赋一些随机值。C和C++中产生随机数的方法如rand()、srand()等在OpenCV中仍可以用。此外,OpenCV还特地编写了C++的随机数类RNG,C的随机数类CvRNG,还有一些相关的函数,使用起来更加方便。说明关键字前带cv的都是C里的写法,不带cv的是C++里的写法,比如CvRNG和RNG,其本质都是一样的。计算机产生的随机数都是伪随机数,是根据种子seed和特定算法计算出来的。所以,只要种原创 2021-01-14 11:28:58 · 261 阅读 · 0 评论 -
opencv——绘制图像(直线、矩形、椭圆、圆、填充)与文字
目录cv::Pointcv::Scalar绘图绘制直线API代码效果绘制矩形API代码效果绘制椭圆API代码效果绘制圆API代码效果设置填充API代码效果绘制文字API代码效果cv::Pointopencv中的一种数据结构,表示在2D平面上的一个点,坐标为(x,y)就是我们初中学的笛卡尔坐标系赋值方法如下:Point p;p.x = 10;p.y = 8;或者Point p; p = Pont(10,8);cv::Scalaropencv中,通过设置这个数据结构来设置颜色。ty原创 2021-01-13 21:14:28 · 2341 阅读 · 0 评论 -
opencv——Mat对象depth(CV_8UC3、CV_32F等)
目录Mat对象构成Mat常用成员bit_depthCV_8|32|64S|U|FCMat对象创建方法imshow显示图像的映射Mat对象构成class CV_EXPORTS Mat{public:/*..很多方法..*//*............*/ int flags;/*flags指定图像的颜色空间 flags > 0 3通道的彩色图像 flags = 0 灰度图像 flags < 0 不作改变原创 2021-01-13 15:16:08 · 4603 阅读 · 1 评论 -
opencv——调整图像亮度、对比度
这里写目录标题图像变换调整图像亮度、对比度原理相关API代码演示效果图像变换像素变换——点操作领域操作——区域操作领域操作多用于卷积,特征提取、图像梯度计算、更深度的一些匹配识别等、角点检测、模糊、平滑等调整图像亮度、对比度调整图像亮度、对比度,属于点操作https://blog.csdn.net/qq_28258885/article/details/112468892点操作参考这一篇原理RGB的值越大,图像越接近白色,在视觉效果来看,亮度越大,RGB的值越小,图像越接近黑色,原创 2021-01-13 14:14:32 · 673 阅读 · 0 评论 -
opencv——图像中的四则运算(图像混合)
目录原理API代码效果加减乘除原理图像混合实际上是像素之间的运算于是要求要求两张图象大小一致APIadd(src1, src2, dst=None, mask=None, dtype=None) // +multiply(src1, src2, dst=None, scale=None, dtype=None) // -subtract(src1, src2, dst=None, mask=None, dtype=None) // xdivide(src1, src2, ds原创 2021-01-12 18:36:04 · 653 阅读 · 0 评论 -
opencv——图像混合
目录图像混合算法原理图像混合图像混合就是将两个尺寸一样的图像按照一定的比例混合到一起,比如我们配置颜料,我们也是按照一定的比例去配置,所有的比例之和为1。算法原理我们用函数来表示一个图像,前提是所有的图像尺寸是一样的,即图像矩阵的行列一样,通道数一样我们用 f0(x) 和 f1(x) 来表示输入的图像,用 g(x) 来表示输出图像,α表示比例( 0≤α≤1 ,一般来说,α取0和1没有太大意义),那我们能得到如下图所示的一个公式。意思就是,两幅图像分别占的比例加起来是1,然后生成新图像图像矩阵原创 2021-01-12 18:19:02 · 1026 阅读 · 0 评论 -
opencv——图像操作
目录前言读像素API写像素前言opencv中的图像操作有哪些?读像素(获取像素)写像素(修改像素、空白图像、分割图像)读像素二维图像保存在电脑中,大家可以理解为矩阵,一个二维数组,每个位置都会有一个像素值。读像素,就是获取某个点处的像素值。API读取像素值时,不同的图像,读取过程有些差别。图像主要是两种:灰度图与RGB图,即黑白图像与彩色图像。1.黑白图像注意:y 是行,x 是列,所以先写 y ,再写 x 。Scalar intensity = image.at<uch原创 2021-01-12 11:14:42 · 336 阅读 · 2 评论 -
opencv——CvMat, Mat, IplImage之间的互相转换
目录IpIImage -> CvMatIplImage -> MatMat -> IplImageCvMat -> MatIpIImage -> CvMat/*cvGetMat*/CvMat matheader;CvMat * mat = cvGetMat(img, &matheader);/*cvConvert*/CvMat * mat = cvCreateMat(img->height, img->width, CV_64FC3);cvCo原创 2021-01-11 11:24:36 · 338 阅读 · 0 评论 -
opencv——Mat对象
目录opencv中的数据结构Mat对象opencv中的数据结构Mat对象OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分IplImage是从2001年OpenCV发布之后就一直存在,是C语言风格的数据结构,需要开发者自己分配与管理内存,对大的程序使用它容易导致内存泄漏问题第一个是大写i不是小写L以前的opencv中会用到IplImage,在算法或程序更新换代的时候会用opencv中提供的方法进行转换。原创 2021-01-11 11:17:50 · 456 阅读 · 0 评论 -
opencv——图像矩阵的掩膜操作
目录获取像素指针像素指针目的API像素范围处理API掩膜操作公式作用API代码演示效果获取像素指针像素指针二维图像保存在电脑中,大家可以理解为矩阵,一个二维数组,每个位置都会有一个像素值。访问像素值,就是访问二维数组中某个位置的值。目的获取到像素点,我们就可以对这个像素点进行操作,如果我们加上循环嵌套,还可以遍历所有的像素点,即对所有的像素点进行操作。APIMat.ptr<uchar>(int i=0) //获取像素矩阵的指针,索引i表示第几行,从0开始计行数。访问的时候,我原创 2021-01-09 14:11:12 · 640 阅读 · 1 评论 -
opencv——图像的加载、修改、保存
目录加载图像代码演示显示图像修改图像保存图像代码演示加载图像cv::imreadimread功能是加载图像文件成为一个Mat对象,其中第一个参数表示图像文件名称第二个参数,表示加载的图像是什么类型,支持常见的三个参数值IMREAD_UNCHANGED(flags = -1) 解码得到的方式读入图像(加载原图),不做任何改变IMREAD_GRAYSCALE(flags = 0) 按单通道的方式读入图像(灰度图像)IMREAD_COLOR(flags = 1)按三通道方式读入图像(RGB图原创 2021-01-08 13:17:48 · 259 阅读 · 2 评论 -
基于VS2015配置opencv3.10
由于现有的教学资料,根据vs2015学习opencv3.10会比较多,所以使用这个版本。其他版本类比即可学习资料学习资料参考贾志刚老师的教学视频,b站上有书籍参考毛星云的opencv3编程入门下载安装VS2015https://pan.baidu.com/s/1x8osoS-RZ89uO3OH34fHcA[提取码]:1234...原创 2021-01-08 09:46:50 · 415 阅读 · 2 评论