OpenCV
文章平均质量分 84
jameshater
这个作者很懒,什么都没留下…
展开
-
将Mat图像显示到MFC PictureControl控件上
void Ctracker_test190220Dlg::ShowMatImage(Mat& src,int ID){ try { if (src.empty())//没有图像时推出 { return; } BITMAPINFO *pBmpInfo1=NULL; if (src.channels() == 1)//灰度图像显示 { pBmpIn...原创 2019-03-01 17:10:27 · 1647 阅读 · 0 评论 -
再谈OpenCV中查询表lookup table的LUT函数
今天在复习之前的OpenCV的学习内容时,发现自己对OpenCV的LUT这个函数理解得不是很透彻,研究了一上午终于是搞明白了,但自己在学习的时候发现对于这个函数的解释很少,现在把自己的理解分享出来,给大家一个参考。 首先看下我测试用的程序:#include #include using namespace std;using namespace cv;#define原创 2016-02-28 14:00:25 · 10865 阅读 · 4 评论 -
关于main主函数的两个参数argc和argv
接触编程有一段时间了,在没学习OpenCV之前,从来就没有去关心过main函数的两个参数怎么传值的问题,貌似之前纯粹的编程main函数根本就不用写参数就直接运行了,似乎也没出什么大问题,今天在做OpenCV的教程How to scan images时,又遇到要给main函数传递参数的问题,而且是图像,真是纠结,后来去查了相关资料,才最终完美解决这个问题,现在分享出来,希望能帮到别人,尤其是初学Op原创 2016-02-27 21:11:35 · 1698 阅读 · 0 评论 -
OpenCV学习笔记二(scan images)
如何扫描图像、查询表以及OpenCV的时间测量一、目标接下来主要解决下面几个问题:l 如何访问图像的每一个像素?l OpenCV矩阵的值是如何储存的?l 如何衡量我们算法的性能?l 什么是查询表以及为什么我们要使用它?二、测试案例让我们思考一个简单的减少色彩的方法。通过使用unsigned char类型的数据来作为矩阵数据的存储,一个通道的像素可能有最多25原创 2016-02-27 20:49:09 · 2560 阅读 · 0 评论 -
OpenCV学习笔记一(Mat)
MatMat是一个基本的类,它包含两部分的数据:一个是矩阵头,另一个就是一个指向矩阵的指针;对于矩阵头它包含这些信息:矩阵的大小,用来存储的方法以及矩阵存储的地址等,而矩阵中包含着一些像素值(这些像素值的维度取决于我们选择储存的方式)。矩阵头的大小是一个常量,然而矩阵自己的大小却一般不相同,取决于储存的图片。我们在进行图像处理时,需要我们尽可能地减少对哪些很大的图像的一些不必要的复制,原创 2016-02-26 10:48:50 · 897 阅读 · 0 评论 -
用OpenCV将图像显示在MFC的窗口中
对于OpenCV2.3以上的版本来说没有CvvImage类,所以要自己在工程中添加这个类,这个类的头文件以及实现文件在网上都可以找到现成的。添加好这个类之后,接下来就是怎么去显示这个图像了,首先需要一张图片,有两种方式,一种是通过摄像机获取,一种是直接在电脑文件中打开。首先对于第一种从摄像机中获取图像,先要利用CvCapture* capture创建一个capture指针用来连接摄像机(这原创 2016-03-10 14:20:48 · 3375 阅读 · 0 评论 -
OpenCV以及C++的头文件的包含方式
在使用OpenCV的时候需要包含头文件,有的是,也有的人是用等方式,不仅仅是OpenCV,在平时的编程中,经常遇到这样的困惑,今天终于是搞明白了,在这里分享一下,希望有同样困惑的人能有收获。首先为了讲解明白,我新建了一个名为“头文件包含方式”的空项目,然后将OpenCV中的一个头文件cv.h来做测试,将其复制成三份,分别重命名为cv1.h,cv2.h,cv3.h,然后将他们分别放在该项目文件夹原创 2016-02-23 15:59:42 · 6146 阅读 · 0 评论 -
图像腐蚀和膨胀
目标: 在这个教程中你将学会: 应用两个最常用的形态学操作:膨胀和腐蚀。为了这个目的,你将使用下面的OpenCV函数: erode() Dilate()形态学操作: 简要的说:就是一系列基于形状的处理图像的操作。形态学操作对输入图像应用一个结构元素并且产生输出图像。 最基本的翻译 2016-03-08 09:47:25 · 711 阅读 · 0 评论 -
OpenCV在VS中的默认配置
1、右键桌面的“计算机”图标然后点击“属性“出现如下界面:2、然后点击”高级系统设置“,如下图所示:3、点击”环境变量“,如下图所示:4、点击”新建“出现如下图所示:5、在变量名里面输入:OPENCV。变量值里面输入你的Opencv的安装地址。注意红方框标记的是你的OpenCV安装地址,安装在哪就是哪。如果把OpenCV安装在E盘Progran Fi原创 2016-02-22 21:17:14 · 774 阅读 · 0 评论 -
图像平滑
在这个教程中你将学会怎么使用OpenCV的函数去应用各种不同的滤波器去平滑图像,例如:blurGaussianBlurmedianBlurbilateralFilter理论:平滑,也叫模糊,是一种简单也经常被使用的图像处理操作;平滑的原因有很多。在这个教程中我们将主要集中在为了减少噪音而平滑(其他的平滑方法将在接下来的教程中看到);去达到平滑效果我们将对我们的图像应翻译 2016-03-07 09:27:57 · 742 阅读 · 0 评论 -
和OpenCV1的互通性
目标: 对于OpenCV的开发团队来说持续地完善这个库是非常重要的。我们一直都致力于向办法去让你的工作过程变得简单容易,与此同时保持这个库的灵活性。新的C++界面就是我们对这个目标的一个发展。然而,向前兼容却是非常重要的。我们不想因为早起的OpenCV库版本而中断你的代码工作。因此,我们确保通过添加一些函数来处理这个问题。在接下来的介绍中你将了解: 相对于O翻译 2016-03-06 11:15:58 · 385 阅读 · 0 评论 -
矩阵的掩码操作
在矩阵上进行掩码操作很简单,主要的思想就是根据一个掩码矩阵(也称为核)去重新计算一幅图像中的每一个像素值。这个掩码矩阵里面的值将决定临近的像素对新像素值的影响多大。从数学的观点上来看,我们利用我们给定的值做了一个加权平均。我们的测试案例:让我们来考虑这个问题:一幅图像的对比增强方法。基本上我们想要对图像的每个像素应用下面的公式:第一种方式是使用公式,然而第二种是使用一种比前者结翻译 2016-02-29 11:03:00 · 4570 阅读 · 0 评论 -
使用OpenCV合成两张图片
目标: 在这个教程中你将会学到: 什么是线性混合以及为什么它有用; 怎么去使用addWeighted组合两张图片;理论: 前面我们的教程中,我们已经了解了很多像素操作,一个有趣的二元操作就是线性柔合操作: 通过让阿尔法的值从0-1之间变化,这个操作可以被用来实现两张图像或视频之间的一种暂时的重叠效果。代码:翻译 2016-03-01 08:59:54 · 2952 阅读 · 0 评论 -
彻底解决显示Opencv中Mat图像到Mfc窗口问题
第一步,转换格式前预先获得待显示控件的大小,若相等则不做处理,若不等则首先改变Mat图像大小,再进行转换。 CRect rect; GetDlgItem(IDC_STATIC_SRC)->GetClientRect(&rect); cv::Size winSize(rect.right, rect.bottom); // Resize the source t...转载 2019-03-01 15:21:37 · 2336 阅读 · 0 评论 -
图像处理、显示中的行宽(linesize)、步长(stride)、间距(pitch)
在图像数据传输和显示的过程中有一个不常用的参数:间距。间距的名称:它有很多的别名,在使用d3d显示的时候,它叫pitch;在用ffmpeg解码的时候,它叫linesize; 在用ffmpeg转换格式的时候,它叫stride。这篇文章中统一以间距来表示。间距为什么出现:这个参数看起来似乎没什么用,因为它的值和图像的宽度一样。但是那是大多数情况下,一旦遇到它和宽度不一样的时候,如果你不了...转载 2018-12-05 21:27:07 · 9428 阅读 · 1 评论 -
C# byte数组转化位Bitmap
C# byte数组转换为8bit灰度图像的问题类似的文章在网上可以看到不少,但多多少少都存在一些问题。这两天做实验室的项目用到这个功能,我从头把它整理了一遍。在看代码之前,首先解释几个问题。1、byte数组存放的是图像每个像素的灰度值,byte类型正好是从0~255,存放8bit灰度图像的时候,一个数组元素就是一个像素的灰度值。仅有这个数组还不足以恢复出原来的图像,还必须事先知道图像的长、宽值;...转载 2018-12-05 15:27:30 · 6517 阅读 · 1 评论 -
贝叶斯滤波
转载自:http://www.cnblogs.com/ycwang16/p/5995702.html 认知计算,还要从贝叶斯滤波的基本思想讲起。这一部分,我们先回顾贝叶斯公式的数学基础,然后再来介绍贝叶斯滤波器。(一). 概率基础回顾我们先来回顾一下概率论里的基本知识:1. XX: 表示一个随机变量,如果它有有限个可能的取值{x1,x2,⋯,xn}{x1,x2,⋯,xn}.2...转载 2018-08-31 11:50:26 · 2278 阅读 · 2 评论 -
OpenCV在C#中应用—OpenCVSharp
1、什么是OpenCVSharp 之前一直是基于OpenCV开发视觉算法,但C++语言对于GUI的开发相对于C#来说确实很不方便,之前就了解到C#下使用OpenCV可以使用EmguCV,这段时间也确实是调通了,但是是通过把C++封装成动态链接库在C#中调用,这样在修改算法的过程中就会非常的不方便,封装DLL的时候也比较麻烦。在C#中除了Emgucv之外,还有一种叫做OpenCVShar...原创 2018-03-21 17:29:40 · 49137 阅读 · 27 评论 -
Matlab标定工具箱使用教程
Matlab标定工具箱使用教程这个教程将带你完整地利用20到25张平面棋盘格图像进行相机标定。这个教程将让你学会如何使用所有工具箱的特征:载入图像、提取图像角点、运行标定引擎、显示结果、控制精度添加和删减图像、图像矫正、导出标定不同格式的数据...这个教程对于刚开始使用工具箱的人来说非常重要。首先下载Matlab标定工具箱:[http://www.vision.caltech.edu/boug原创 2016-11-15 16:02:35 · 51532 阅读 · 28 评论 -
OpenCV里IplImage的widthStep参数 和width参数
一直以为IplImage结构体中的widthStep元素大小等于width*nChannels,大错特错!(为了快速访问,要内存对齐啊)查看OpenCV2.1的源码,在src/cxcore/cxarray.cpp文件中,找到cvInitImageHeader函数,函数中对widthStep大小赋值如下:[cpp] view plain copy print?转载 2016-05-03 21:37:29 · 1604 阅读 · 0 评论 -
最小二乘法
监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归。回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线转载 2016-03-28 10:40:38 · 525 阅读 · 0 评论 -
meanshift运动跟踪算法详解
这几天学习《学习openCV》中的第十章运动跟踪,里面讲到了meanshift算法,根据书上所讲实在难以理解,meanshift在运动跟踪这个过程中到底起到什么作用,于是经过几天不断地看相关资料和别人的博客文章,慢慢思路清晰了,也终于知道了meanshift这个算法它到底是什么作用,起到什么样的角色,虽然为了弄明白这个算法花了几天的时间,但是通过这个过程学到了很多其他的知识。好了,接下来进入正题。原创 2016-03-27 16:00:01 · 14095 阅读 · 4 评论 -
计算物体的凸包(convexHull)
1、什么是凸包? 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。右图中由红色线段表示的多边形就是点集Q={p0,p1,...p12}的凸包。 一组平面上的点,求一个包含所有点的最小的凸多边形,这就是凸包问题了。这可以形象地想成这样:在地上放置一些不可移动的木桩,用一根绳子把他们尽量紧地圈起来,这就是凸原创 2016-03-15 09:29:37 · 3924 阅读 · 0 评论 -
滤波
在上次的opencv源码解析之滤波前言1中,按照opencv_tutorials.pdf中的滤波部分试了下常用的4种滤波器的使用方法。在opencv的C++中,这4个函数分别为:blur,GaussianBlur,meidaBlur,bilateralFilter.下面就这几个函数在opencv中的功能,以及参数做个介绍:均值滤波:其函数声明为:void blur(InputArray s转载 2016-03-06 11:06:05 · 401 阅读 · 0 评论 -
随机数产生器RNG
用OpenCV做算法的朋友们肯定为随机数烦恼过,新版本一直支持随机数产生器啦,而且还继续支持之前版本的c格式的函数,不过与时俱进,我这里介绍C++的RNG类。它可以压缩一个64位的i整数并可以得到scalar和array的随机数。目前的版本支持均匀分布随机数和Gaussian分布随机数。随机数的产生采用的是Multiply-With-Carry算法和Ziggurat算法。其构造函数的初始化转载 2016-03-06 10:41:25 · 609 阅读 · 0 评论 -
opencv标定
转载请注明来自:http://blog.csdn.net/zhouyelihua/article/details/38421377资源下载见:http://download.csdn.net/detail/zhouyelihua/8748569 看到本文被转载很多次很高兴但是之前的代码有点小问题且不易懂。于是乎写了一个简洁的代码首先介绍用本程序标定的步骤:1,。拍完转载 2016-02-19 20:19:29 · 491 阅读 · 0 评论 -
OpenCV2中图像读取、显示、保存等基本操作
之前看《学习OpenCV》这本书,一直在用IplImage,但是我自己安装的是OpenCV2的,因此,在学这本书的时候,结合自己用的时候会出现很多的疑惑,知道现在才搞清楚,原来这本书是基于OpenCV1的........不过幸好发现的早,今天主要学习了OpenCV2中队图像的基本操作,如图像的载入,图像的显示以及保存等基本操作,确实感觉比OpenCV1方便很多,贴上今天的敲的代码。/*****原创 2015-11-28 21:44:33 · 15810 阅读 · 0 评论 -
opencv中的cvAddWeighted函数
cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst ); src1 第一个原数组. alpha 第一个数组元素的权值 src2 第二个原数转载 2016-01-16 11:06:22 · 450 阅读 · 0 评论 -
cvFloodFill漫水填充算法
这种填充算法首先要选择一个种子点,然后把邻近区域所有相似点填充上同样颜色,大多数的填充算法都与cvFloodFill()类似。cvFloodFill(img,CvPoint seedPoint,CvScalar newVal,CvScalar loDiff,CvScalar upDiff,CvConnectedComp *comp,int flags,CvArr *mask);img为输入图转载 2016-01-15 22:51:30 · 2721 阅读 · 0 评论 -
OpenCV形态学相关操作
#include#include#includeusing namespace cv;using namespace std; int main(int argc, char* argv[]){ cvNamedWindow("形态学"); cvNamedWindow("处理后"); char* filename = "G:/Learning/Machine_version/P原创 2016-01-15 21:44:16 · 267 阅读 · 0 评论 -
图像的深度和通道
图像的深度:图片是由一个个像素点构成的,所有不同颜色的像素点构成了一副完整的图像,计算机存储图片是以二进制来进行的。1 bit : 用一位来存储,那么这个像素点的取值范围就是0或者1,那么我们看来这幅图片要么是黑色要么是白色。4 bit : 取值范围为 0 到 2 的4次方8 bit : 来存储像素点的取值范围为 0 到 2 的8次方 以此类推,我们转载 2015-11-20 10:58:41 · 520 阅读 · 0 评论 -
通过文件对话框导入图像问题
通过图像对话框导入图像的时候存在一个问题,就是图像路径的类型转换问题,因为在MFC中的文件路径的格式是CString类型的,而我们利用OpenCV打开图像的路径是string类型,所以就需要转换,在这期间试了很多方法,包括一开始用强制类型转换都发现有错误,到后来发现是编码问题,一个是现在的Unicode,一个是多字节,但是把项目设置成多字节编译不通过,所以放弃这种方法,还是要在Unicode下把类原创 2015-11-17 08:52:30 · 625 阅读 · 0 评论 -
基于OpenCV的canny边缘检测的MFC实现
void CMy_OpencvDlg::OnBnClickedCanny(){ // TODO: 在此添加控件通知处理程序代码 IplImage* img_canny = cvCreateImage(cvSize(m_img.width,m_img.height),IPL_DEPTH_8U, 1); cvCanny(&m_img,img_canny,0,200,3); CDC* p原创 2015-11-16 23:34:59 · 1315 阅读 · 1 评论 -
使用OpenCV在MFC中显示图像
现在要慢慢完成建立起自己的视觉软件,首先第一步就是需要在MFC中的图像控件中显示我们的图像,因为考虑到OpenCV的图像数据格式和MFC中的格式是不一样的,OpenCV提供给C++的图像数据格式是CMat,而给C提供的是IplImage,所以我们需要把CMat转换成能被MFC识别的格式。后面查资料才知道OpenCV2.2之前的版本的图像格式为CV::Mat,MFC内可以显示的是CvvImage类格原创 2015-11-16 18:30:30 · 1714 阅读 · 0 评论 -
图像平滑处理
图像的平滑处理一般用于模糊处理和减小噪声,常常作为更高级应用的预处理。常用的平滑处理操作有均值滤波、中值滤波和高斯滤波。下面简单介绍一下这三种滤波算法。1.均值滤波就是用滤波掩膜确定的邻域内像素的平均灰度值代替图像中每个像素点的值,这种处理减小了图像灰度的“尖锐变化”,起到了减噪的作用。但是均值滤波处理带来了边缘模糊的负面效应。均值滤波器的主要应用是去除图像中的不相干细节,“不相干”是指与转载 2015-11-10 11:32:43 · 5824 阅读 · 0 评论 -
视频处理——实现滚动条实时显示
之前试了很多种方法,都不能实现视频播放的过程中滚动条的实时显示,出现的情况都是滚动条指到哪然后就从哪播放,但是滚动条不会随着视频的播放自己移动。现在已经能够实现了。//////////////让视频中产生滚动条,并让滚动条实时刷新////////////////////////////////////////////////////////////////////////////////////原创 2015-11-10 09:57:45 · 1408 阅读 · 0 评论 -
OpenCV访问图像数据并设定灰度值
首先要了解OpenCV中单通道和多通道的图像,其图像数据格式是不同的,特别注意对于三通道而言,其在某个像素上的通道顺序是B->G->R。/*********************************************** 第三讲 访问图像数据 ********************************************/#include #include "原创 2015-11-30 20:04:11 · 6568 阅读 · 0 评论 -
使用指针的方式遍历图像数据
/*********************************************** 第四讲 使用指针的方式遍历图像 ************************************************/#include "cv.h"#include "highgui.h"#include using namespace cv;using namespa原创 2015-11-30 22:08:45 · 1464 阅读 · 0 评论 -
齐次坐标的理解
一直对齐次坐标这个概念的理解不够彻底,只见大部分的书中说道“齐次坐标在仿射变换中非常的方便”,然后就没有了后文,今天在一个叫做“三百年 重生”的博客上看到一篇关于透视投影变换的探讨的文章,其中有对齐次坐标有非常精辟的说明,特别是针对这样一句话进行了有力的证明:“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”——F.S. Hil转载 2016-02-19 15:21:06 · 565 阅读 · 0 评论 -
离散傅里叶变换
目标: 我们将寻找下面这些问题的答案: 什么是傅里叶变换以及为什么我们使用它; 在OpenCV中怎么做傅里叶变换; copyMakeBorder(),merge(),dft(),getOptimalDFTSize(),log()以及normalize()等函数的使用;源代码://////////////////翻译 2016-03-05 20:53:13 · 1673 阅读 · 0 评论