![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
opencv
酷小川
研究方向:嵌入式
展开
-
图像处理 形状特征相关概念
链码:描述各边界点像素的坐标。描述曲线方向的链码法用曲线的起始点的坐标和斜率来表示直线。区域边界轮廓可理解为相邻边界像素之间的单元连线逐段相连而成。边界链码具有方向性。斜率:表示轮廓上个点的指向。曲率:表示斜率的变化率,用于描述轮廓上各点沿轮廓方向变化的情况。曲率的局部极值点称为角点。多边形主要特征参数:顶原创 2017-07-10 16:50:25 · 2341 阅读 · 0 评论 -
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 · 4057 阅读 · 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 · 3408 阅读 · 0 评论 -
使用vector创建并初始化动态二维数组 C++
图像处理中,有的算法需要获取图像的尺寸,并创建一个二维数组来存储相关的值,因为需要涉及不同的图片,因此二维数组的大小也在不断变化,因此需要创建动态二维数组来解决这个问题。使用vector创建动态二维数组的方法如下:int main(){ Mat Image, grayImage; Image = imread("a.png"); //namedWindow("原图...原创 2018-12-25 15:36:59 · 3639 阅读 · 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 · 1348 阅读 · 1 评论 -
将动态二维数组数据存入一维数组,并排列
在图像处理中,有时需要将每个像素点对应的一些数据做排序处理,然后进行下一步工作。这时,就需要将每个像素点对应的值存入二维数组,然后将二维数组中的数据存入一维数组,最后做排序处理。 下列程序中:首先创建一个4*4的图像,定义和图像尺寸大小一样二维数组,然后给每个像素点赋值,接着将数据存入一维数组,最后排序。#include <opencv2/opencv....原创 2019-01-10 17:29:53 · 3166 阅读 · 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 · 20879 阅读 · 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 · 6506 阅读 · 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 · 1928 阅读 · 1 评论 -
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 · 1334 阅读 · 0 评论 -
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 · 4027 阅读 · 0 评论 -
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 · 7110 阅读 · 1 评论 -
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 · 6356 阅读 · 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 · 254 阅读 · 0 评论 -
三维重建过程与算法介绍
一、图像预处理 图像预处理的目的在于改善图像的视觉效果,提高图像的清晰度,有选择的突出某些感兴趣的信息,抑制 无用的信息,以提高图像的使用价值。 图像平滑处理:中值滤波、形态学滤波、双边滤波、自适应均值滤波、自适应中值滤波、自适应加权滤波。 有关的改进方法:椒盐噪声过滤算法:GA-BP神经网络噪声检测的自适应滤波算法。原创 2017-08-15 11:35:05 · 22670 阅读 · 8 评论 -
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 · 1068 阅读 · 0 评论 -
边界跟踪算法(一)——Square跟踪算法
最近研究图像边界跟踪的相关算法,看了一些论文,得到一些相关的算法知识,与大家分享。Square算法为了提取图案的边界,首先,对给定的数字图像,即在网格平面白像素背景上的一组黑色像素,我们需要找到一个黑色边界像素,并把它作为跟踪的“开始”点。算法将从该“开始”点出发来完成对边界的跟踪。具体过程如下:(1)每当发现自己站在一个黑色的像素,则向左进入相邻的像素;(2)每当发现自己原创 2017-07-10 23:09:44 · 15266 阅读 · 0 评论 -
边界跟踪算法(二)——摩尔邻域跟踪算法
摩尔领域也称为8邻域或者间接邻域。摩尔邻域跟踪算法的基本思想:找到一个黑色像素,并将它定为你的起始像素。(定位一个起始像素可以以多种方式来完成的;我们将从网格的左下角开始,自下而上扫描每一列像素,从最左向右的每列像素,直到遇到一个黑色的像素,我们将其作为我们的起始像素)。总的想法如下图所示:每次遇到黑色像素,将设置为当前边界像素点,然后原路返回到先前到达的白色像素,原创 2017-07-10 23:26:49 · 13189 阅读 · 1 评论 -
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 · 5838 阅读 · 0 评论 -
opencv计时函数
从其他地方学习的知识,与大家分享。opencv中有两个简单的计时函数:(1)getTickCount() getTickCount()函数返回CPU自某个事件(如开机)以来走过的时钟周期数。(2)getTickFrequency()函数返回CPU一秒走过的时钟周期数。这样,我们可以轻松的以秒为单位对某运算计时。 这原创 2017-07-18 15:09:53 · 1606 阅读 · 0 评论 -
opencv访问图片中像素的方法(二)——迭代器iterator
opencv访问图片像素的第二种方法为:迭代法。在迭代法中,我们所需要的仅仅是获得矩阵的begin和end,然后增加迭代直至从begin到end。将*操作符添加在迭代指针前,即可访问当前指向的内容。相比于指针直接访问可能出现越界问题,迭代器绝对是非常安全的方法。用关键字“STL迭代器”进行搜索可以找到各种相关的博文和资料。下面为一个示例程序。#include "stdafx原创 2017-07-18 19:11:15 · 1517 阅读 · 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 · 707 阅读 · 0 评论 -
opencv访问图片中像素的方法(一)——指针访问
opencv中提供了3种访问每个像素的方法。本文介绍第一种方法:指针访问。用指针访问像素的方法利用c语言中的操作符【】。这种方法访问快,但代码显得比较抽象。下面提供一个参考程序,并标明注释,代码为opencv3环境下的代码。#include "stdafx.h"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2原创 2017-07-18 18:36:01 · 2892 阅读 · 0 评论 -
opencv 滤波与模糊的区别
初学者对”滤波”和”模糊”两个概念容易混淆。这里来说明一下。滤波是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。我们可以以高斯滤波为例子。原创 2017-07-25 20:16:01 · 1779 阅读 · 0 评论 -
findContours函数参数详解
OpenCV中通过使用findContours函数,简单几个的步骤就可以检测出物体的轮廓,很方便。这些准备继续探讨一下findContours方法中各参数的含义及用法,比如要求只检测最外层轮廓该怎么办?contours里边的数据结构是怎样的?hierarchy到底是什么鬼?Point()有什么用?先从findContours函数原型看起:findContours( InputOut转载 2017-07-14 19:37:37 · 5463 阅读 · 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 · 7607 阅读 · 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 · 100188 阅读 · 2 评论 -
opencv 形态学处理——腐蚀
膨胀与腐蚀是一对相反的操作,所以腐蚀就是求局部最小值的操作。相关API函数:腐蚀:erode函数函数原型:void erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Poi...原创 2017-08-01 21:01:23 · 694 阅读 · 0 评论 -
opencv 形态学处理——膨胀
膨胀与腐蚀能实现各种功能:(1)消除噪声;(2)分割出独立的图像元素,在图像中连接相邻的元素;(3)寻找图像中的极大值区域和极小值区域;(4)求出图像梯度;膨胀就是求局部最大值的操作。就是将图像与核进行卷积。腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。膨胀是对图像中高亮部分进行膨胀,效果图拥有比原图更大的高亮区域。腐蚀是对原图高亮部分的腐蚀,效果图拥有比原图原创 2017-08-01 19:53:06 · 8082 阅读 · 1 评论 -
区域紧密度检测 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 · 1217 阅读 · 1 评论