2020-01-28 21:47:22
先上代码:#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("e:/3.png&q...
2020-01-28 15:16:35
在官网 www.opencv.org 上下载 这是一个比较老的版本。本系列学习笔记使用的这个版本。下面是opencv的简单介绍。下面说明一下opencv加上vc++开发环境的配置。首先按下面的说明添加vc++的库,包含目录,依赖项。这里勇哥使用的是vs2019集成环境下的vc++。接下来用一段代码验证一下opencv开发环境是否搭建成功。#include <opencv2/opencv.h...
2019-12-15 14:22:48
最近在实验室里遇到了一个问题,就是在有一张轮廓二值图的情况下,如何才能将轮廓进行细化,得到轮廓的骨架。效果如图:可以看到,右边图中的数字变瘦了,这就是细化算法的作用下面我们来讲一下,Thining-Algorithm的算法原理。一、八领域我们先来介绍一下,八领域这一个概念如图,八领域是指包围了中心P1像素的八个像素点。在很多图像处理算法中,八领域的这个概念都极为常见,应用十分广泛。二、算法原理首先...
2019-12-15 14:19:01
在上一篇图像解析力算法—SFR(Spatial Frequency Response)源码分析(一)中介绍了SFR的几个重要函数,接下来我们看一下主流程和其他函数。4、sfrProc作用:计算SFR数值的主流程函数short sfrProc (double **freq, double **sfr,
int *len,
double *farea,...
2019-12-06 11:21:01
任意的灰度图像可以被看做是地质学表面,高亮度的地方是山峰,低亮度的地方是山谷。给每个孤立的山谷(局部最小值)不同颜色的水(标签),当水涨起来,根据周围的山峰(梯度),不同的山谷也就是不同的颜色会开始合并,要避免这个,你可以在水要合并的地方建立障碍,直到所有山峰都被淹没。你所创建的障碍就是分割结果,这个就是分水岭的原理,但是这个方法会分割过度,因为有噪点,或者其他图像上的错误。所以OpenCV实现了...
2019-12-06 11:15:47
OTSU算法又叫最大类间方差阈值分割算法,也叫大津算法,是在1980年由日本的大津展之提出,是由最小二乘法推导而来,用于一些简单的阈值确定。对于一个灰度图,我们有时候非常想把他用一个阈值将他的前景和背景区分开来。我们可以合理的假设为如果将图像的像素分布图画出来,那么图像上应该有两个峰,即前景色和背景色。在这两个峰之间肯定有一个谷,那么我们就可以将阈值设在这里,从而对图像达到一个良好的分割效果。怎样...
2019-12-06 11:12:33
物体的凸包(Convex hull)用于理解物体的形状或轮廓。很多复杂物体的特性都能很好的被这种缺陷表现出来。 一组平面上的点,求一个包含所有点的最小的凸多边形,这就是凸包问题了。这可以形象地想成这样:在地上放置一些不可移动的木桩,用一根绳子把他们尽量紧地圈起来,这就是凸包了。凸包有什么应用?凸包在很多地方有着重要的应用,如手势识别,需要识别出手的轮廓的凸包,二维或者三维区域的边界的信息等。凸缺陷...
2019-12-06 11:09:22
查找轮廓什么是轮廓:一个轮廓是由图像中的一系列点组成的,也就是图像中的一条曲线。在OpenCV中一般用序列来存储轮廓信息。序列中的每个元素是曲线中每个点的位置。关于序列:序列是内存存储器中可以存储的一种对象,序列是某种结构的链表。下面是序列结构体:typedef sturct CvSeq{
int flags;
int header_size;
CvSeq * h_pr...
2019-12-06 11:06:00
什么是反射投影反射投影是记录给定图像中像素点如何适应直方图模型像素分布的方式(估计你看了这句话还是不懂)。英文的解释是这样的:a way of recording how well the pixels of a given image fit the distribution of pixels in a histogram model.(还是不懂?)简单地讲就是就是先计算某一特征的直方图模型,...
2019-12-06 11:04:40
什么是仿射变换:一个任意的仿射变换都能表示为 乘以一个矩阵 (线性变换) 接着再 加上一个向量 (平移).仿射变换可以实现什么功能:旋转平移缩放操作怎样得到一个仿射变换:放射变换代表的是两幅图之间的关系。通过原图和目标图像三个点之间的对应关系,可以求出一个2 X 3的矩阵。我们通常使用2 x 3矩阵来表示仿射变换。怎样去旋转一个图像:- 确定旋转图像的中心点- 旋转的角度. 在OpenCV中正角度...
2019-12-06 11:01:58
在图像处理和与计算机视觉领域,兴趣点(interest points),或称作关键点(keypoints)、特征点(feature points) 被大量用于解决物体识别,图像识别、图像匹配、视觉跟踪、三维重建等一系列的问题。我们不再观察整幅图,而是选择某些特殊的点,然后对他们进行局部有的放矢的分析。如果能检测到足够多的这种点,同时他们的区分度很高,并且可以精确定位稳定的特征,那么这个方法就有使用...
2019-12-06 10:59:49
漫水填充法是一种用特定的颜色填充联通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法。漫水填充经常被用来标记或分离图像的一部分以便对其进行进一步处理或分析,也可以用来从输入图像获取掩码区域,掩码会加速处理过程,或只处理掩码指定的像素点,操作的结果总是某个连续的区域。所谓漫水填充,简单来说,就是自动选中了和种子点相连的区域,接着将该区域替换成指定的颜色,这是个非常有用的功能,经...
2019-12-06 10:55:14
模板匹配是在一幅图像中寻找一个特定目标的方法。这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标。程序中会用到 OpenCV 的函数包括:void matchTemplate( InputArray image, InputArray templ,
OutputArr...
2019-12-06 10:47:36
对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间,然后通过计算H1与H2之间的距离得到两个直方图的相似程度进而进行比较图像本身的相似度。OpenCV提供的比较方法有四种:直方图比较方法Correlation相关性比较Chi-Squra卡方比较Intersection十字交叉性Bhattacharyya distance巴氏距离直方图比较方法–相关性计算(CV_COMP_CORREL...
2019-12-06 10:36:02
灰度直方图,RGB直方图,梯度直方图对于数据在一定范围之内,可以统计频率的都可以做直方图。图像直方图。是指对整个图像在灰度范围内的像素值(0-255)统计出现频率次数,据此生成的直方图成为图像直方图,直方图反映了图像灰度的分布情况,是图像的统计学特征。直方图均衡化是一种提高图像对比度的方法,拉伸图像灰度值范围。如何实现均衡化呢?通过重映射可以将图像灰度分布从一个分布映射到另一个分布,然后在得等映射...
2019-11-29 17:39:46
重映射就是把一个图像中一个为之的像素放置到另一个图片指定位置过程。为了完成重映射过程有必要获得一些插值作为非整数像素坐标,因为原图像与目标图像的像素坐标不是一一对应的。我们通过重映射来表达每个像素的位置(x, y):g(x, y)=f(h(x,y))这里g()是目标图像,f()是原图像,h(x,y)是作用于(x,y)的映射方法函数。假设有一幅图像I,满足下面条件作重映射:h(x,y)=(I.col...
2019-11-29 17:36:28
原理:霍夫变换圆检测原理和直线相似,直线检测需要两个参数(theta,r)。圆形需要圆心做坐标两个参数和半径。对左边做霍夫圆变换可以发现圆形的位置变成了一个两点,说明HoughCircles(image,outputArray circles, 发现圆信息int method, 方法-HOUGH_GRADIENTdouble dp, dp = 1;double mindist, 最短距离,可以分辨...
2019-11-29 17:33:10
霍夫变换直线检测前提条件:边缘检测已经完成(单通道8位灰度图像,经过二值化变为黑白图像)平面空间转到极坐标空间通过上式子可以把像素点转化成极坐标,如下图所示。上面的曲线相交与一点,说明了什么信息呢?说明这些像素都在一条直线。比如一个图像有200个像素,通过坐标变换。那么就可以得到200条曲线。相交点的对应横坐标角度就是直线在空间坐标的角度。这就是霍夫变换的原理。霍夫直线变换介绍:变换到极坐标中,从...
2019-11-29 17:28:00
算法介绍:Canny是一种边缘检测算法1.高斯模糊–GaussianBlur2.灰度转换–cvtColor3.计算梯度–sobel4.非最大信号抑制 对非边缘的像素进行移植,在切向和法向 去掉,5.高低阈值输出二值图像,进行边缘连接,如果大于最高阈值的像素要保留,低于最低的要舍去,中间的作为连接图像。非多大信号抑制:在x方向和y方向做完梯度变换角度是梯度变化最大的方向。如果在和梯度垂直的方向上的相...
2019-11-29 17:25:29
理论:在二阶微分的时候,最大变化处的值为零即边缘是零值,通过二阶导数计算,依据理论我们可以计算出图像二阶导数,提取边缘。处理流程:高斯模糊-去噪声GaussianBlur()转化为灰度图像cvtColor()拉普拉斯-二阶导数计算Laplacian()提取绝对值convertScaleAbs()显示结果代码:#include <opencv2/opencv.hpp>
#include...
2019-11-29 17:23:07
卷积边缘问题在做卷积处理时,图像边缘的像素不会被卷积操作。原因在于边界像素没有完全跟卷积和重合,所以3x3像素会有1个像素的边缘没有被处理。边缘处理方法:在卷积开始之前增加边缘像素,填充的像素为0或者RGB黑色。这样就确保边缘被处理。OpenCV默认的是BORDER_DEFAULT,其他还有:BORDER_CONSTANT - 填充边缘用指定像素BORDER_REPLICATE -填充边缘像素用已...
2019-11-27 14:07:48
卷积模糊图像,图像边缘,增强图像常见卷积算子:Robert、sobel、拉普拉斯算子代码:#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(int argc,char ** argv)
{
M...
2019-11-27 14:04:23
阈值(threshold)简单地说就是把图像分割的一个标尺。阈值类型1.阈值二值化(threshold binary)大于阈值取最大值,小于阈值取最小值。2.阈值反二值化(threshold binary Interval)3.截断(truncate)超过阈值和阈值相等,否则为0.4.阈值取零(threshold to zero)小于阈值取0,大于的不变。5.阈值反取零(threshold to...
2019-11-27 10:46:40
金字塔原理图像金字塔是一个图像集合,集合中所有的图像都源于同一个原始图像,而且通过对原始图像连续降采样获得。在图像处理中,常常会调整图像大小,最常见的就是放大和缩小。一个图像金字塔是一系列图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就像一个古埃及的金字塔。高斯金字塔–用来对图像进行降采样拉普拉斯金字塔–用来重建一张图片根据他的上层降采样图片。高斯金字塔:高斯金字塔是...
2019-11-27 10:42:32
在opencv\sources\samples下面提供了很多的官方例程,是学习OpenCV的最好的资源。视频教程地址:https://www.bilibili.com/video/av17748771/?p=12感谢贾志刚老师的视频教程。开运算闭运算形态学梯度:膨胀减去腐蚀顶帽(top hat)原图像与开操作之间的差值图像。黑帽:闭操作图像和原图像之间的差值图像。提取直线:提取步骤输入彩色图像—转...
2019-11-27 10:40:13
在opencv\sources\samples下面提供了很多的官方例程,是学习OpenCV的最好的资源。视频教程地址:https://www.bilibili.com/video/av17748771/?p=11感谢贾志刚老师的视频教程。程序:#include<iostream>
#include<opencv2/core/core.hpp>
#include<h...
2019-11-27 10:37:02
在opencv\sources\samples下面提供了很多的官方例程,是学习OpenCV的最好的资源。视频教程地址:https://www.bilibili.com/video/av17748771/?p=9感谢贾志刚老师的视频教程。图像模糊原理Smooth/Blur 是图像处理中最简单和常用的操作之一。使用该操作的原因之一就是为了给图像预处理时候减低噪声。使用Smooth/Blur操作背后是数...
2019-11-27 10:35:14
在opencv\sources\samples下面提供了很多的官方例程,是学习OpenCV的最好的资源。视频教程地址:https://www.bilibili.com/video/av17748771/?p=8感谢贾志刚老师的视频教程。绘制形状使用cv::Point与cv::ScalarPoint表示2D平面的一个点x,yp = Point(10,8);Scalar表示四个元素的向量Scalar(...
2019-11-27 10:32:22
在opencv\sources\samples下面提供了很多的官方例程,是学习OpenCV的最好的资源。理论:图像变换可以看做如下:像素变换–点操作邻域变换–区域操作其中图像亮度和对比度属于像素变换–点操作α是对比度调节参数,β是调节亮度。一些主要API:Mat new_image = Mat::zeros(image.size(),image.type()); //创建一个空白图像saturat...
2019-11-27 10:30:09
理论–线性混合操作线性混合理论:两幅图像的每个像素都进行加权相加。α的取值范围是0~1。相关API线性混合API:void cv::addWeighted(inputArray src1,double alpha,InputArray src2,double gamma,outputArray dst,int dtype = -1);代码演示#include<iostream>
#i...