opencv
文章平均质量分 63
马大哈先生
新人一枚,请大家多多关照!
展开
-
opencv笔记(三十五)——线性插值、双线性插值
1.为什么要用图像的插值?[1] 在图像的放大和缩小的过程中,需要计算新图像像素点对应原图的位置,如果计算的位置不是整数,就需要用到图像的内插,我们需要寻找在原图中最近的像素点赋值给新的像素点,这种方法最简单是最近邻插法,这种方法好理解、简单,但是不实用,会产生失真现象,产生棋盘格效应,更实用的方法就是双线性内插。2.一维线性插值 ...原创 2019-09-05 11:16:33 · 2372 阅读 · 0 评论 -
opencv笔记(二十八)——OpenCV中矩阵的归一化
1. 归一化定义与作用 归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。 归一化的目的简而言之,即归一化数据。是使得没有可比性的数据变...转载 2018-09-02 11:20:53 · 14173 阅读 · 0 评论 -
opencv笔记(二十一)——骨骼去毛刺
图像细化多用于机器人视觉,OCR字符识别等领域,细化后的图像经过去毛刺就成为了我们常说的图像的骨架。 该图像细化代码依据论文: T. Y. ZHANG and C. Y. SUEN A Fast Parallel Algorithm for Thinning Digital Patterns代码如下:void ThinSubiteration1(Mat & pSrc, Ma...原创 2018-08-25 17:59:16 · 11022 阅读 · 0 评论 -
opencv笔记(零)——OpenCV参考手册之Mat类详解
Mat OpenCV 自 2001 年出现以来。在那些日子里库是围绕C接口构建的。在那些日子里,他们使用名为IplImage C 的结构在内存中存储图像。这是您将在大多数较旧的教程和教材中看到的那个。使用这个结构的问题是将 C 语言的所有负面效果都摆到了桌面上。最大的问题是手动管理。它是建立在用户来负责处理内存分配和解除分配的假设之上的。当程序规模较小时,这是没有问题的,一旦代码基开...转载 2018-08-25 16:02:24 · 1192 阅读 · 0 评论 -
opencv笔记(十九)——提取连通区域轮廓
连通区域指的是二值图像中相连像素组成的形状。而内、外轮廓的概念及opencv1中如何提取二值图像的轮廓见我的这篇博客:http://blog.csdn.net/lu597203933/article/details/14489225 轮廓的简单提取算法如下: 系统性地扫描图像直到遇到连通区域的一个点,以它为起始点,跟踪它的轮廓,标记边界上的像素。当轮廓完整闭合,扫描回到上一个位...转载 2018-08-24 16:42:01 · 6696 阅读 · 0 评论 -
opencv笔记(十八)——连通区域分析
本文主要介绍在CVPR和图像处理领域中较为常用的一种图像区域(Blob)提取的方法——连通性分析法(连通区域标记法)。文中介绍了两种常见的连通性分析的算法:1)Two-pass;2)Seed-Filling种子填充,并给出了两个算法的基于OpenCV的C++实现代码。一、连通区域分析连通区域(Connected Component)一般是指图像中具有相同像素值且位置相邻的...转载 2018-08-24 16:26:04 · 4906 阅读 · 0 评论 -
opencv笔记(二十七)——cvGetSize与cvSize的区别
CvSize 矩形框大小,以像素为精度 typedef struct CvSize{int width; /* 矩形宽 */int height; /* 矩形高 */}CvSize;/* 构造函数 */inline CvSize cvSize( int width, int height );GetSize返回矩阵或图像ROI的大小 CvSize cvGetSize...转载 2018-08-31 14:37:28 · 3624 阅读 · 0 评论 -
opencv笔记(二十六)——OpenCV 中CV_IMAGE_ELEM 的使用
CV_IMAGE_ELEM 是一个宏函数,基本形式: CV_IMAGE_ELEM(image,elemtype,row,col) 其中,image为指针数组,elemtype为数据的存取类型,row为图像的高度,范围:0~height;col为图像的宽度,范围:0~width (height = cvGetSize(...转载 2018-08-31 14:35:50 · 1287 阅读 · 0 评论 -
c++中的指数函数怎么写
C里面函数原型是double pow(double,double),需要包含math.h。C++里面推荐这样用(包含ISO C++从C继承的数学函数库,但头文件不带.h扩展名且前面加c,需要用namespace std,函数原型与C中相同):#include<cmath> //添加需要包含的头文件...using namespace std;int main(){ ...转载 2018-09-06 10:30:00 · 43940 阅读 · 3 评论 -
opencv笔记(三十五)——测试一帧图像的处理时间
timeGetTime()函数函数以 毫秒 计的系统时间。该时间为从系统开启算起所经过的时间。在SDK中,可以用 DWORD timeGetTime(VOID)函数获取系统时间,其返回值是毫秒单位的。可以用其实现延时功能的函数。 void Delay(DWORD delayTime) { DWORD delayTimeBegin; DWORD d...转载 2018-12-10 19:16:46 · 2156 阅读 · 0 评论 -
opencv()——uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型、
它就是一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是其它数据类型。uint8_t,uint16_t,uint32_t等都不是什么新的数据类型,它们只是使用typedef给类型起的别名,新瓶装老酒的把戏。不过,不要小看了typedef,它对于你代码的维护会有很好的作用。比如C中没有bool,于是在一个软件中,一些程序员使用int,一些程序员使用...转载 2018-10-23 10:26:47 · 2078 阅读 · 0 评论 -
opencv笔记(三十四)——在MFC的picture控件中如何显示Mat图
想把kinect V1.0设备获取到的彩色图显示在MFC的picture控件中,图的格式是opencv中的Mat矩阵,每秒30帧,显示相对还是比较流畅。整个接口由一个函数完成,函数无返回值,要求输入picture控件ID和Mat图像矩阵 函数:void showMatImgToWnd(CWnd* pWnd, const cv::Mat& img) 1、...转载 2018-10-24 09:50:01 · 1563 阅读 · 0 评论 -
opencv笔记(三十三)——Video Capture使用示例。读取视频
这次通过一个读取视频的综合例子来介绍VideoCapture类的一些基本操作:#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream> ...转载 2018-10-08 11:07:35 · 43240 阅读 · 1 评论 -
opencv笔记(三十二)——将模糊集合用于灰度变换和边缘检测
模糊集合原理 在计算机编程的时候,常常会使用一种“干脆的”集合。在判断某件事,或者某个变量的时候,常常使用的是布尔值(因为某件事,不是真就是假)。通过一个阈值,去判断这件事,而这样的一个阈值的设定,会产生一个问题。还是使用《Digital Image Processing》 Rafael C. Gonzalez / Richard E. Woods书中的例子,看以下两个图。 ...转载 2018-10-08 10:47:37 · 4535 阅读 · 4 评论 -
opencv笔记(三十一)——Mat 矩阵数据类型转换convertTo
一、数据类型转换1.一般图像文件格式使用的是unsigned 8bits,对应的数据类型有:CV_8UC1、CV_8UC2,CV_8UC3其中,CV_8UC3表示3通道8位的unsigned char型float是32位,对应的CvMat数据结构类型是:CV_32FC1,CV_32FC2,CV_32FC3double是64位,对应的CvMat数据结构类型是:CV_64FC1,CV_...转载 2018-09-26 16:20:44 · 19347 阅读 · 0 评论 -
opencv笔记(三十)——opencv中滑动条的创建
//注:调用滑杆时,显示滑杆的那张图的名字要和createTrackbar函数的第二个参数和onChangeTrackBar中imshow的名字相同#include <iostream>#include <opencv2\highgui\highgui.hpp>using namespace std;using namespac...转载 2018-09-20 17:27:12 · 523 阅读 · 0 评论 -
opencv笔记(二十九)——提取轮廓相关函数使用方法
opencv中常用的跟轮廓相关的操作有:findContours()查找轮廓;drawContours()画轮廓;轮廓填充;计算轮廓的面积和周长;提取轮廓凸包,矩形,最小外接矩形,外接圆等。它们都有相应的函数可以直接调用,那么任意形状怎么取呢? 方法1:点乘,将其形状与图像进行点乘,求其形状对应的图像形状; 方法2:用findContours函数...转载 2018-09-19 16:10:54 · 5737 阅读 · 0 评论 -
opencv笔记(二十五)——对于.at<uchar>(j, i) 和.at<uchar>(Point(j, i)) 的区别
srcImage.at<uchar>(j, i) //表示的是 j 行 i 列 的这个像素srcImage.at<uchar>(Point(j, i)) //表示的是 坐标(j,i)的像素为了我下面的图方便说明 j 换成 x , i 换成 y 。也就是说:srcImage.at<uchar>(x, y) //表示的是 x 行 y 列 的这个像素...转载 2018-08-31 14:33:54 · 4310 阅读 · 0 评论 -
opencv笔记(二十四)——图像遍历的4种方式(at、指针、isContinuous、迭代器)、在Vector尾部加数据函数push_back()。
一、遍历图像 我们在实际应用中对图像进行的操作,往往并不是将图像作为一个整体进行操作,而是对图像中的所有点或特殊点进行运算,所以遍历图像就显得很重要,如何高效的遍历图像是一个很值得探讨的问题。1.1 at<typename>(i,j) Mat类提供了一个at的方法用于取得图像上的点,它是一个模板函数,可以取到任何类型的图像上的点。下面我们通过一个图像...转载 2018-08-28 09:43:18 · 3164 阅读 · 0 评论 -
opencv笔记(二十三)——OpenCV轮廓vector vector<Point>,vector<Vec4i>,vector<Rect>,vector<RotatedRect>
轮廓周围绘制矩形框vector<vector<Point>>,vector<V e c 4 i>,vector<R e c t>,vector<R o t a t e d R e c t>刚开始学OpenCV没多久遇到这些个东西不知道是什么,搞得很不舒服。通过给轮廓绘制矩形框弄明白了这些东西。vector<vecto...转载 2018-08-28 09:30:51 · 14893 阅读 · 8 评论 -
opencv笔记(六)——区域生长算法
注:本程序只能做图像分割,结果图是转自原作者的,暂时没实现该功能。1、理论基础 区域生长算法的基本思想是将有相似性质的像素点合并到一起。对每一个区域要先指定一个种子点作为生长的起点,然后将种子点周围领域的像素点和种子点进行对比,将具有相似性质的点合并起来继续向外生长,直到没有满足条件的像素被包括进来为止。这样一个区域的生长就完成了。这个过程中有几个关键的问题:a> 给定...转载 2018-07-26 20:33:08 · 12899 阅读 · 3 评论 -
opencv笔记(五)——IplImage和CvMat
OPENCV一书中,对IplImage和CvMat的讲述不够详细,很多时候当我们处理图像的时候,我们会避免用cvMat而是直接用IplImage的方法。 IplImage这个结构体中存储图像数据的部分是char * imageData,这个指针指向图像数组的首地址。而imageData是一个一维数组,遍历其数据的方法是使y从0~imageData->height,假设图...转载 2018-07-26 18:50:27 · 784 阅读 · 0 评论 -
opencv笔记(九)——Mat和IPLImage
OpenCV1基于C接口定义的图像存储格式IplImage*,直接暴露内存,如果忘记释放内存,就会造成内存泄漏。从OpenCV2开始,开始使用Mat类存储图像,其新的C++接口,cv::Mat代替了原来c风格的CvMat和IplImage。目前,2.0版本对c的接口也是支持的。 相对于c的接口,c++的cv::Mat统一了矩阵和图像这两个概念。事实上,矩阵和图像其实...转载 2018-07-29 18:35:04 · 15779 阅读 · 2 评论 -
opencv笔记(八)——OpenCV中Mat总结
转自:https://www.cnblogs.com/justkong/p/7278579.htmlhttps://blog.csdn.net/xiaowei_cqu/article/details/7771760一、数字图像存储概述数字图像存储时,我们存储的是图像每个像素点的数值,对应的是一个数字矩阵。Mat和Matlab里的数组格式有点像,但一般是二维向量,如果是灰度图,一般存...转载 2018-07-29 16:00:25 · 888 阅读 · 0 评论 -
opencv笔记(七)——图像映射到极指数空间(cvLogPolar)
把图像映射到极指数空间void cvLogPolar( const CvArr* src, CvArr* dst,CvPoint2D32f center, double M,int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS ); 参数 功能 src 输入图像。 ...转载 2018-08-22 08:39:59 · 929 阅读 · 0 评论 -
opencv笔记(一)——读取、显示、另存为、批量读取照片
一、批量有序读取图片#include<opencv2/opencv.hpp>using namespace cv;void main(){ //批量读取图片(有序) char filename[50]; char winName[50]; Mat srcImg; for (int i = 1; i < 100; i++) ...转载 2018-07-26 18:48:47 · 2201 阅读 · 0 评论 -
opencv笔记(四)——自适应阈值(adaptiveThreshold)
图像阈值化的一般目的是从灰度图像中分享目标区域和背景区域,然而仅仅通过设定固定阈值(固定阈值的求解可点此查看我写的博文)很难达到理想的分割效果。在实际应用中,我们可以通过某个像素的邻域以某种方法确定这个像素应该具有的阈值,进而保证图像中各个像素的阈值会随着周期围邻域块的变化而变化。在灰度图像中,灰度值变化明显的区域往往是物体的轮廓,所以将图像分成一小块一小块的去计算阈值往往会得出图...转载 2018-07-25 20:23:19 · 1588 阅读 · 0 评论 -
opencv笔记(三)——调整运行窗口图片的大小
总结在opencv中,图片显示的问题。简要解决图片窗口和图片大小的问题。namedWindow("窗口名",1);//创建窗口imshow("窗口名",要显示的图片);//在创建的窗口中显示图片 官网中内容,默认情况下,是1,自动调整窗口大小模式。如果在图片高清情况下,显示图片窗口很大,电脑屏幕放不下,并且窗口还不能通过拖动鼠标来调整打下。Flags=0,是WINDO...转载 2018-07-25 17:37:54 · 3806 阅读 · 0 评论 -
opencv笔记(二)——图像的膨胀(dilate)和腐蚀(erode)
一、图像腐蚀(erode):1.1 官方文档说明:void cv::erode ( InputArray src, OutputArray dst, InputArray kernel, Point anchor = Point(-1,-1), int...原创 2018-07-25 17:30:05 · 7210 阅读 · 3 评论 -
opencv笔记(十七)——形态学操作(膨胀、腐蚀、开、闭操作)
一、设置结构元素:getStructuringElement 图像处理经常要用到形态学操作,其中首先要获取结构元素。包括结构元素的大小及形状。 OpenCV提供了一个函数getStructuringElement,可以获取常用的结构元素的形状:矩形(包括线形)、椭圆(包括圆形)及十字形。 C++:Mat getStructuringElement(int shape, Size...转载 2018-08-23 17:08:44 · 1973 阅读 · 0 评论 -
opencv笔记(十一)——灰度直方图
一、灰度直方图c++的原型函数:void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool acc...转载 2018-08-20 15:30:36 · 21200 阅读 · 3 评论 -
opencv笔记(十)——颜色空间转换cvtColor()
我们生活中大多数看到的彩色图片都是RGB类型,但是在进行图像处理时,需要用到灰度图、二值图、HSV、HSI等颜色制式,opencv提供了cvtColor()函数来实现这些功能。首先看一下cvtColor函数定义: C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );参数解释: . Inp...转载 2018-08-20 11:24:14 · 590 阅读 · 0 评论 -
opencv笔记(十五)——图像的二值化
要对图像进行轮廓检测,则必须要先对图像进行二值化,图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。《OpenCV入门指南》系列文章地址:http://blog.csdn.net/morewindows/article/category/129...转载 2018-08-22 14:45:52 · 522 阅读 · 0 评论 -
opencv笔记(二十二)——CV_8UC1,CV_32FC3等参数的含义
(一)Mat矩阵(图像容器)创建时CV_8UC1,CV_8UC2等参数详解 Mat不但是一个非常有用的图像容器类,同时也是一个通用的矩阵类.创建一个Mat对象的方法很多,我们现在先看一下Mat矩阵/图像容器类在OpenCv中的有关源代码:使用Mat图像容器类创建Mat类的对象 //! default constructor Mat(); //! c...转载 2018-08-26 10:29:57 · 5287 阅读 · 0 评论 -
QT学习笔记(四)——应用实例:计算器设置
一、界面分析:二、相关组件介绍2.1 QLineEdit组件作用:1. 用于接受用户输入; 2.能够获取用户输入的字符串;3.是功能性组件,需要父组件作为容器; 4.能够在父组件中进行定位 QWidget w; //生成QWidget对象,顶级组件 QLineEdit le(&w)...原创 2018-08-06 14:26:28 · 371 阅读 · 0 评论 -
opencv笔记(一)——命名空间及相关函数介绍
命名空间 opencv中的C++类和函数都是定义在命名空间cv之内的,所以有如下opencv函数的两种调用方法: ex1: Mat srcImg = cv::imread(“1.jpg”); ex2: using namespace cv; Mat srcImg = imread(“1.jpg”); namedWindow()函数 用法:namedWindow...转载 2018-07-24 14:29:00 · 572 阅读 · 0 评论