![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
opencv-计算机视觉
ZouCharming
我要AC!!!!
展开
-
Mat对象的初始化和一些相关操作函数
Mat对象在opencv的图像处理中起着至关重要的作用。对于Mat对象的初始化有很多种方法。(1)Mat(Size size, int type);//size数据可以通过Mat的子函数size获取,type数据表示图像的类型,常用的有CV_8UC3、CV_8UC1,第一个是说每个像素单元是8位uchar类型,图像通道数是3(比如BGR图像),第二个不同在于图像通道数是1(比如灰度图)(2原创 2017-04-08 11:12:25 · 3966 阅读 · 0 评论 -
霍夫直线和圆检测
在图像处理中,图像的特征提取是一大关键,今天学习的霍夫变换就是用来提取图像中的直线和圆的。对于霍夫的直线检测,步骤如下:(1)利用Canny边缘提取获取图像边缘的灰度图(2)利用函数HoughLinesP(源Mat对象,存放结果的向量,以像素为单位的距离精度,以弧度为单位的角度精度,阈值,最短距离,最大间断距离)//存放结果的向量是一个n x 4的二维数组,每个单元有四个值,分别代表直原创 2017-04-25 13:06:08 · 862 阅读 · 0 评论 -
边缘提取
今天学习的内容是图像的边缘提取。边缘提取其实也是一种滤波,不同的算子有不同的提取效果。比较常用的方法有三种,Sobel算子,Laplacian算子,Canny算子。在opencv中,这几个算子被封装成函数。(1)Sobel算子是通过求取像素的一阶导来获取边缘,如果变化大则像素值高,Sobel算子有x和y方向之分。Sobel(源Mat对象,目标Mat对象,输出图像深度,x方向阶数,y方向阶数原创 2017-04-23 17:25:18 · 8589 阅读 · 0 评论 -
自定义滤波和边缘处理
之前的学习中接触了很多常用的滤波,不过,如果我们想用自己定义的滤波该怎么办呢?其实也是没问题的。首先回顾一下滤波的工作流程,首先确定滤波的范围,然后确定范围中每个点的权重,然后算出区域的像素加权和,最后替换掉目标点的像素值。我们可以利用filter2D函数来实现。(1)在使用filter2D之前,我们需要定义一个小Mat对象,相当于滤波范围,这个小Mat对象的内容就是每个点的权重。Mat原创 2017-04-23 11:07:10 · 3030 阅读 · 0 评论 -
图像金字塔——上采样和下采样
在图像处理中,图像的缩放常常会利用到。图像金字塔概念就和图像的缩放相关。如果把正常大小的图片放在金字塔结构的中间,那么金字塔的上部就相当于图片的收缩,金字塔的地步就相当于图片的放大。金字塔结构有两种,分别是高斯金字塔和拉普拉斯金字塔。在本次学习中,接触到的是高斯金字塔,我们把图片收缩叫做下采样,图片放大叫做上采样。相关函数如下:(1)pyrUp(源Mat对象,目标Mat对象,Size(源对象列原创 2017-04-20 22:28:01 · 6503 阅读 · 4 评论 -
opencv中的各种滤波函数
在图像处理中,尽可能消除图片中的噪声,消除噪声就需要用到滤波,在本次opencv学习中,学习了三个滤波方式。(1)平均滤波,就是将一个区域内的像素值求和取平均值,然后用这个平均值替换区域中心的像素值。blur(源Mat对象,目标Mat对象,Size对象,Point对象)//Size对象用来确定区域大小,Point对象如果x,y都是-1则表示更新区域中心的像素。(2)高斯滤波,也是将一个原创 2017-04-16 21:05:11 · 13630 阅读 · 0 评论 -
opencv简单形状绘制
今天继续opencv的学习,今天学习的内容是,画一些简单的形状,比如直线、方形等。主要涉及的函数:(1)Mat::zeros(Size size,Type type)//可以用来初始化一个背景全黑的画板。(2)Point对象,初始化方式Point(int x,int y),用来建立一个点对象,在图形绘制上常用。(3)Scalar对象,用来建立颜色对象,初始化时最对四个通道。(4原创 2017-04-14 21:57:32 · 1742 阅读 · 0 评论 -
形态学操作
在介绍opencv的形态学操作之前,要先介绍一下两个基础内容,一个是腐蚀,一个膨胀。膨胀和腐蚀相当于滤波的一种,只不过之前介绍的几种滤波,什么均值啊,高斯啊都是把区域的平均值或者说中值去替换中心点的像素值,而膨胀和腐蚀正好相反,膨胀是用区域中最高的像素值去替换中心点的像素值,而腐蚀则是用区域中最小的像素值去替换中心点的像素值。相关函数如下:(1)Mat kernel = getstructur原创 2017-04-17 22:10:43 · 854 阅读 · 0 评论 -
opencv掩膜操作
所谓的掩膜操作,是用来提高图像的对比度。掩膜操作有一个简单的公式:在进行掩膜操作之前,必须需要了解下面几个opencv的函数:(1)int Mat对象.channels();//获取图像的通道数,不同类型的图像通道数不一样,以BGR为例,一张图按行按列均匀分布着像素点,但是每个像素点由三种颜色组成(灰度图只有一种颜色),相当于三个按行排列的通道,所以在处理图片像素时,往往列数要乘以原创 2017-04-04 22:55:00 · 3725 阅读 · 1 评论 -
opencv基本的几个图像处理函数
转眼大学四年就要过去了,终于到了做毕设的时候。选的题目我只能说比较僵,目标跟踪。。。根本不会,不过研究生导师是搞这方面的,早点学习一下也挺不错的。我老师给我的要求是使用opencv编写一个目标跟踪的程序,之前从没接触过opencv,接下来几周只能和opencv硬肛了。今天学习了一下最基础的几个函数,记录一下学习内容。(1)图片读取imread()+Mat对象要进行图像处理,首先肯定是要原创 2017-04-04 21:14:20 · 6162 阅读 · 0 评论 -
图片像素值得获取和修改
在之前的学习中,已经知道了如何获取每个图像的行像素数组,但是在修改图像像素值时并不方便,特别是多通道图像,很容易弄错,今天的学习,让我知道了更加直观的方式修改图像像素。主要涉及下面两个函数:(1)对于单通道图像(灰度图):Mat对象.at(x,y);//x,y是图像上的坐标,返回一个uchar值(2)对于三通道图像(BGR图像):Mat对象.at(x,y);//x,y是图像上的坐标,返原创 2017-04-12 12:38:29 · 3676 阅读 · 0 评论 -
图像的重映射
今天学习了一个比较简单的内容,叫图像的重映射。思想很简单,就和中学学的函数映射差不多,定义x和y方向的映射表就能实现。所谓的映射表就是指用来确定生成图像的每个像素点对应于原图的位置。涉及的函数如下:(1)remap(源Mat对象,目标Mat对象,x方向的映射表,y方向的映射表)//注意这里的映射表是Mat类对象(虽然我觉得用一维数组就行了),关于映射表内容的解释看代码注释代码演示:#i原创 2017-04-26 10:49:27 · 2066 阅读 · 0 评论