opencv基础
文章平均质量分 87
opencv基础知识介绍
酷小川
研究方向:嵌入式
展开
-
区域紧密度检测 opencv
紧密度=轮廓面积/最小外接矩形面积#include "iostream";#include "opencv.hpp"using namespace std;using namespace cv;//紧密度int main(){ Mat grayImage, dstImage, resultImage; Mat Image = imread("1.png"); res...原创 2019-05-21 20:50:04 · 1238 阅读 · 1 评论 -
面积因子与细长度去除障碍物
#include "opencv.hpp"#include "iostream"using namespace std;using namespace cv;int main(){ Mat srcImage, grayImage, dstImage,imgHSVMask,resultImage; Mat img = imread("Road1.png"); resultImag...原创 2019-05-21 20:34:33 · 260 阅读 · 0 评论 -
opencv 获取最小外接矩形
#include "iostream";#include "opencv.hpp"using namespace std;using namespace cv;int main(){ Mat grayImage, dstImage, resultImage; Mat Image = imread("test.png"); resultImage = Image.clone();...原创 2019-05-19 16:21:31 · 6403 阅读 · 1 评论 -
opencv 去除小面积区域
功能:#include "opencv.hpp"#include "iostream"using namespace std;using namespace cv;int main(){ Mat srcImage, grayImage, dstImage,imgHSVMask; int size = 800; //面积因子 //srcImage = im...原创 2019-05-19 14:54:21 · 7134 阅读 · 1 评论 -
opencv 提取彩色图像轮廓
本程序功能:提取彩色3通道图像的轮廓#include <opencv.hpp> #include <iostream> #include <vector> using namespace cv;using namespace std;int main(){ Mat dstImage = imread("1.png"); n...原创 2019-04-29 16:50:00 · 4057 阅读 · 0 评论 -
opencv 提取单通道图像轮廓
程序功能:提取单通道图像轮廓#include <opencv.hpp> #include <iostream> #include <vector> using namespace cv;using namespace std;int main(){ Mat SrcImage = imread("1.png"); Mat g...原创 2019-04-29 09:30:04 · 1355 阅读 · 0 评论 -
opencv中应用step访问图像像素
#include "stdafx.h"#include "opencv.hpp"using namespace std;using namespace cv;int main(){ Mat grayImage, dstImage; Mat Image = imread("1.png"); imshow("原图", Image); cvtColor(Image, grayIma...原创 2019-03-06 15:36:31 · 1946 阅读 · 1 评论 -
将动态二维数组数据存入一维数组,并排列
在图像处理中,有时需要将每个像素点对应的一些数据做排序处理,然后进行下一步工作。这时,就需要将每个像素点对应的值存入二维数组,然后将二维数组中的数据存入一维数组,最后做排序处理。 下列程序中:首先创建一个4*4的图像,定义和图像尺寸大小一样二维数组,然后给每个像素点赋值,接着将数据存入一维数组,最后排序。#include <opencv2/opencv....原创 2019-01-10 17:29:53 · 3185 阅读 · 0 评论 -
opencv Rect函数裁剪图片
Rect函数参数列表如下:Rect(int _x,int _y,int _width,int _height);int_x和int_y: 代表左上角点的坐标。int_width和int_height:代表需要裁剪区域的尺寸 。#include "opencv.hpp"using namespace std;using namespace cv;int main(){ M...原创 2019-01-02 15:48:18 · 21051 阅读 · 4 评论 -
opencv 创建图片
实验中需要创建一些测试图片来测试,所以下面介绍快速创建图片的方法:#include "opencv.hpp"using namespace std;using namespace cv;int main(){ Mat image(200,150,CV_8UC1); //创建一个高200,宽100的灰度图 for (int i = 0; i < image.rows; i+...原创 2019-01-02 16:02:55 · 6525 阅读 · 0 评论 -
C++ 实现soble算子
sobel算子的原理网上可以直接搜到,这里就不详细介绍。sobel算子计算中涉及的变量如下:C++代码如下:#include "iostream"#include "math.h"#include "opencv.hpp"using namespace std;using namespace cv;const double π = 3.14;int main(){ M...原创 2018-12-25 17:04:01 · 1387 阅读 · 1 评论 -
使用vector创建并初始化动态二维数组 C++
图像处理中,有的算法需要获取图像的尺寸,并创建一个二维数组来存储相关的值,因为需要涉及不同的图片,因此二维数组的大小也在不断变化,因此需要创建动态二维数组来解决这个问题。使用vector创建动态二维数组的方法如下:int main(){ Mat Image, grayImage; Image = imread("a.png"); //namedWindow("原图...原创 2018-12-25 15:36:59 · 3651 阅读 · 0 评论 -
二维Otsu算法的原理与实现
1.简介: 一维Otsu算法有计算简洁、稳定、自适应强等优点,被广泛用于图像分割中。但一维Otsu算法没有考虑图像像素点之间的关系,当图像中有噪声时,会导致分割的效果不理想。因此,刘健庄等人在1993年提出了二维的Otsu算法,提升了算法的抗噪声能力。2.算法思想: 同时考虑像素的灰度值分布和它们邻域像素的平均灰度值分布,因此形成的阈值是一个二维矢量,最佳的阈值在一个二维的...原创 2017-10-23 18:43:06 · 19178 阅读 · 9 评论 -
ICP算法的原理与实现
一、背景与意义 点云数据能够以较小的存储成本获得物体准确的拓扑结构和几何结构,因而获得越来越广泛的关注。在实际的采集过程中,因为被测物体尺寸过大,物体表面被遮挡或者三维扫描设备的扫描角度等因素,单次的扫描往往得不到物体完整的几何信息。因此,为了获得被测物体的完整几何信息,就需要将不同视角即不同参考坐标下的两组或者多组点云统一到统一坐标系下,进行点云的配准。在配准算法中,研究者使用最...原创 2018-05-11 16:06:06 · 79105 阅读 · 19 评论 -
运行PCL代码出现C2988,C2143,C2913等错误的解决方法
参考网上教程,在vs2017(windows10)上配置PCL后,运行PCL官方示例代码:#include "stdafx.h"#include <iostream> #include <string> #include <pcl/io/ply_io.h> #include <pcl/point_types.h> #include...原创 2018-05-22 11:48:19 · 3011 阅读 · 5 评论 -
opencv 访问彩色图片像素(.at方法)
Mat类提供了一个at的方法用于取得图像上的点,适用于访问具体某个第i行,j列的像素,而不适用遍历像素。下面通过一个程序来说明.at的用法。#include "stdafx.h"#include <cv.h> #include <highgui.h> #include <opencv2/imgproc/imgproc.hpp> ...原创 2018-09-13 10:42:49 · 4077 阅读 · 0 评论 -
opencv 访问彩色图片像素(指针方法)
#include "stdafx.h"#include <cv.h> #include <highgui.h> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> ...原创 2018-09-13 11:01:30 · 3423 阅读 · 0 评论 -
边界跟踪算法(一)——Square跟踪算法
最近研究图像边界跟踪的相关算法,看了一些论文,得到一些相关的算法知识,与大家分享。Square算法为了提取图案的边界,首先,对给定的数字图像,即在网格平面白像素背景上的一组黑色像素,我们需要找到一个黑色边界像素,并把它作为跟踪的“开始”点。算法将从该“开始”点出发来完成对边界的跟踪。具体过程如下:(1)每当发现自己站在一个黑色的像素,则向左进入相邻的像素;(2)每当发现自己原创 2017-07-10 23:09:44 · 15328 阅读 · 0 评论 -
边界跟踪算法(二)——摩尔邻域跟踪算法
摩尔领域也称为8邻域或者间接邻域。摩尔邻域跟踪算法的基本思想:找到一个黑色像素,并将它定为你的起始像素。(定位一个起始像素可以以多种方式来完成的;我们将从网格的左下角开始,自下而上扫描每一列像素,从最左向右的每列像素,直到遇到一个黑色的像素,我们将其作为我们的起始像素)。总的想法如下图所示:每次遇到黑色像素,将设置为当前边界像素点,然后原路返回到先前到达的白色像素,原创 2017-07-10 23:26:49 · 13266 阅读 · 1 评论 -
图像处理 形状特征相关概念
链码:描述各边界点像素的坐标。描述曲线方向的链码法用曲线的起始点的坐标和斜率来表示直线。区域边界轮廓可理解为相邻边界像素之间的单元连线逐段相连而成。边界链码具有方向性。斜率:表示轮廓上个点的指向。曲率:表示斜率的变化率,用于描述轮廓上各点沿轮廓方向变化的情况。曲率的局部极值点称为角点。多边形主要特征参数:顶原创 2017-07-10 16:50:25 · 2358 阅读 · 0 评论 -
opencv中Threshold函数的介绍
文章是对网上一些资料的整理。Threshold函数典型的应用是对灰度图像进行阈值操作得到二值图像。double threshold( const Mat& src, Mat& dst, double thresh,double maxVal, int thresholdType );src:8或者32位浮点类型原图像。dst:用于存放结果图像。thresh:原创 2017-07-12 21:13:08 · 5862 阅读 · 0 评论 -
findContours函数参数详解
OpenCV中通过使用findContours函数,简单几个的步骤就可以检测出物体的轮廓,很方便。这些准备继续探讨一下findContours方法中各参数的含义及用法,比如要求只检测最外层轮廓该怎么办?contours里边的数据结构是怎样的?hierarchy到底是什么鬼?Point()有什么用?先从findContours函数原型看起:findContours( InputOut转载 2017-07-14 19:37:37 · 5494 阅读 · 0 评论 -
opencv计时函数
从其他地方学习的知识,与大家分享。opencv中有两个简单的计时函数:(1)getTickCount() getTickCount()函数返回CPU自某个事件(如开机)以来走过的时钟周期数。(2)getTickFrequency()函数返回CPU一秒走过的时钟周期数。这样,我们可以轻松的以秒为单位对某运算计时。 这原创 2017-07-18 15:09:53 · 1619 阅读 · 0 评论 -
opencv访问图片中像素的方法(一)——指针访问
opencv中提供了3种访问每个像素的方法。本文介绍第一种方法:指针访问。用指针访问像素的方法利用c语言中的操作符【】。这种方法访问快,但代码显得比较抽象。下面提供一个参考程序,并标明注释,代码为opencv3环境下的代码。#include "stdafx.h"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2原创 2017-07-18 18:36:01 · 2905 阅读 · 0 评论 -
opencv访问图片中像素的方法(二)——迭代器iterator
opencv访问图片像素的第二种方法为:迭代法。在迭代法中,我们所需要的仅仅是获得矩阵的begin和end,然后增加迭代直至从begin到end。将*操作符添加在迭代指针前,即可访问当前指向的内容。相比于指针直接访问可能出现越界问题,迭代器绝对是非常安全的方法。用关键字“STL迭代器”进行搜索可以找到各种相关的博文和资料。下面为一个示例程序。#include "stdafx原创 2017-07-18 19:11:15 · 1532 阅读 · 0 评论 -
opencv访问图片中像素的方法(三)——动态地址计算
opencv访问图片中像素的第三中方法是:动态地址计算。这种方法容易理解,符合大家对像素的直观认识。下面为示例程序:#include "stdafx.h"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/core/core.hpp"#in原创 2017-07-18 19:21:39 · 720 阅读 · 0 评论 -
opencv 滤波与模糊的区别
初学者对”滤波”和”模糊”两个概念容易混淆。这里来说明一下。滤波是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。我们可以以高斯滤波为例子。原创 2017-07-25 20:16:01 · 1790 阅读 · 0 评论 -
opencv 高斯滤波
GaussianBlur函数的作用是用高斯滤波器来模糊一张图片,对输入的图像src进行高斯滤波之后用dst输出。void GaussianBlur(InputArray src,OutputArray dst,Size ksize,double sigmaX,double sigmaY=0,intborderType=BORDER_DEFAULT)第一个参数:InputArray类型的sr原创 2017-07-26 20:03:53 · 1094 阅读 · 0 评论 -
opencv图像的深度及取值范围
图像的位深度及其取值范围:src.depth()Mat类型:矩阵数据类型: —— CV_(S|U|F)C S= 符号整型 U=无符号整形 F=浮点型 如:CV_8UC1 表示一个8位无符号整型单通道矩阵 CV_32FC2 表示一个32位浮点型双通道矩阵转载 2017-07-31 18:47:05 · 7629 阅读 · 0 评论 -
opencv 形态学处理——膨胀
膨胀与腐蚀能实现各种功能:(1)消除噪声;(2)分割出独立的图像元素,在图像中连接相邻的元素;(3)寻找图像中的极大值区域和极小值区域;(4)求出图像梯度;膨胀就是求局部最大值的操作。就是将图像与核进行卷积。腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。膨胀是对图像中高亮部分进行膨胀,效果图拥有比原图更大的高亮区域。腐蚀是对原图高亮部分的腐蚀,效果图拥有比原图原创 2017-08-01 19:53:06 · 8101 阅读 · 1 评论 -
opencv 形态学处理——腐蚀
膨胀与腐蚀是一对相反的操作,所以腐蚀就是求局部最小值的操作。相关API函数:腐蚀:erode函数函数原型:void erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Poi...原创 2017-08-01 21:01:23 · 707 阅读 · 0 评论 -
opencv getStructuringElement函数
getStructuringElement函数会返回指定形状和尺寸的结构元素。Mat getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1));这个函数的第一个参数表示内核的形状,有三种形状可以选择。矩形:MORPH_RECT;交叉形:MORPH_CROSS;椭圆形:MORPH_ELL...原创 2017-08-02 09:30:06 · 100552 阅读 · 2 评论