图像识别
文章平均质量分 77
菜鸟小馒头
这个作者很懒,什么都没留下…
展开
-
OpenCV中的Mat函数
Mat是opencv2.0推出的处理图像的新的数据结构,现在越来越有趋势取代之前的cvMat和lplImage,相比之下Mat最大的好处就是能够更加方便的进行内存管理,不再需要程序员手动管理内存的释放。opencv2.3中提到Mat是一个多维的密集数据数组,可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。 下面列举一个小程序,初步窥探下Mat使用方法:具体的Mat函数直接看文档即可原创 2017-11-08 07:49:55 · 2259 阅读 · 0 评论 -
图像二值阈值化、开运算
学习OpenCV 第五章课后练习题5载入一张风景照片,然后风景不动,在中心位置放一个咖啡杯,再拍摄一张,载入电脑过程中转换为8为灰度图像。a:取其差的绝对值并显示结果=>带有噪声的咖啡杯掩码b:结果进行二值化阈值操作,超过阈值的设置为255c:进行CV_MOP_OPEN操作,进一步清除噪声#include #include #include #include #incl原创 2017-11-22 16:58:03 · 443 阅读 · 0 评论 -
LogPolar 坐标变换
对于二维图像,Log-Polar表示从笛卡尔坐标到极坐标的变换。OpenCV中对于数极坐标转换的函数是cvLogPolar():void cvLogPolar(const CvArr * src , CvArr * det , CvPoint2D32f center , double n , int flags = CV_INTER_LINEAR | CV_WARP_FILL_OUTLIE原创 2017-12-02 07:43:27 · 862 阅读 · 0 评论 -
OpenCV 第五章课后题6 创建一个清晰的掩码
#include #include #include #include #include #include using namespace std;using namespace cv;typedef struct regioninfo{ CvPoint Temp; double area;}REGIONINFO;double FloodFillImag原创 2017-11-23 08:27:55 · 277 阅读 · 0 评论 -
积分图像
OpenCV可以轻松计算积分图像,只要用一个具有相应名称cvIntegral()的函数。积分图是一个数据结构,可以实现子区域的快速求和。其中在人脸识别及相关算法中应用的Haar小波拥有显著应用。积分图像简单来说就是(x,y)点的积分像素时(0,x)和(0,y)的求和。void cvIntegral(const CvArr * image , CvArr * sum , CvArr *原创 2017-12-02 16:29:31 · 457 阅读 · 0 评论 -
OpenCV 中Resize 和 cvPydown的使用
载入一幅图像分别使用cvResize() 和 cvPyrDown()进行图片的三次缩放,比较结果;#include #include #include #include #include #include using namespace std;using namespace cv;IplImage * doPryDown(IplImage * in,int filter=原创 2017-11-23 12:20:06 · 944 阅读 · 0 评论 -
OpenCV 阈值化操作cvThreshold 和 自适应阈值cvAdaptiveThreshold操作
载入一幅图片,使用cvThreshold函数对其进行操作,设置阈值为128。使用自适应阈值进行同样操作#include #include #include #include using namespace std;using namespace cv;int main(int argc, const char * argv[]) { /*1.载入图像*/原创 2017-11-23 15:31:01 · 1184 阅读 · 0 评论 -
直方图原理和应用
概念:在分析图像、物体、视频信息的过程中,我们常常把眼中的看到的物体用直方图(histogram)表示。应用:直方图可以用来描述各种不同的事情,如物体的彩色分布、物体边缘梯度模板、以及表示物体目标位置的当前假设的概率分布。直方图可以用来进行快速姿态识别、检测视频中的场景变换。原理:直方图就是对数据进行统计,将统计值组织到一系列实现定义好的bin中。bin中的数值是从数据中计算出的特征的原创 2017-12-04 11:22:16 · 5723 阅读 · 0 评论 -
《学习OpenCV》第七章直方图(练习7.1)
《学习OpenCV》第七章课后题一7.1 在0-1之间生成1000个随机值ri,定义一个bin的大小,并且建立一个直方图几1/ri。在每一个bin中元素数是否相同(正负差值在10内即可)#include #include #include using namespace std;using namespace cv;#define cvQueryHistValue_1D(原创 2017-12-04 15:56:13 · 277 阅读 · 0 评论 -
《学习OpenCV》第七章直方图(练习7.2)
给定三幅在书中讨论的不同光照条件下的手图像,利用cvCalcHist()来获得室内拍照的手的色肤直方图分别给定2维、8维、16维、32维、256维进行运算#include #include #include using namespace std;using namespace cv;#define cvQueryHistValue_1D( hist, idx0 )原创 2017-12-04 21:10:56 · 360 阅读 · 0 评论 -
OpenCV-轮廓
Canny边缘检测算法可以根据像素间的差异检测出轮廓边界的像素,但是并没有将轮廓作为一个整体。利用cvFindContours()可以实现把边缘像素组装成轮廓。有关内存和序列的知识比较多和复杂,就不在这里详细阐述了。下面先给出一个轮廓的例子:给出一个窗口用于显示图像,滑动条(trackbar)用于设置阈值,然后对采二值化后的图像提取轮廓并绘制。控制参数的滑动条变化,更新图像。#原创 2017-12-05 20:39:28 · 228 阅读 · 0 评论 -
OpenCV - 轮廓练习一
我们检测输入图像的轮廓,然后追个绘制每个轮廓。#include #include #include #include using namespace std;using namespace cv;#define CVX_RED CV_RGB(0xff, 0x00, 0x00)#define CVX_GREEN CV_RGB(0x00, 0xff, 0x00)#defin原创 2017-12-05 22:15:12 · 270 阅读 · 0 评论 -
OpenCv - 轮廓练习二(8.1)
OpenCV3 中cvFindDominantPoints 这个函数用什么替代了?题目:用keynote画了一个图片,然后灰度化、二值化、查找轮廓,描述轮廓,最后查看关键点。#include #include #include using namespace std;using namespace cv;#define CVX_RED CV_RGB(0xff, 0x00,原创 2017-12-06 09:47:36 · 510 阅读 · 0 评论 -
MAC 下搭建OpenCV开发环境
1、brew install opencv2、安装完毕后,在/usr/local/opt下回包含opencv相关的文件夹3、在/usr/local/include和usr/local/lib下也会包含对应的opencv库文件和头文件4、新建一个xcode项目,选择OS X Command Line Tool工程。5、分别在Header Search原创 2017-11-07 21:50:17 · 449 阅读 · 0 评论 -
cvFilter2D了解和使用
cvFilter2D()函数接口void cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel, CvPoint anchor=cvPoint(-1,-1) ); src 代表:输入图像dst 代表:输出图像kernel代表: 卷积核, 单通道浮点矩阵。 如果想要应用不同的核于不同的通道,先用 cvSplit原创 2017-11-27 17:34:07 · 3194 阅读 · 0 评论 -
Sobel函数原理和应用
用来表达微分的最常用的操作是Sobel微分算子。Sobel算子包含任意阶的微分以及融合偏导。http://blog.csdn.net/tonyshengtan/article/details/43698711 这个帖关于Sobel的卷积算子怎么推导的有很详细的介绍;下面我们看一下函数原型CVAPI(void) cvSobel( const CvArr* src, CvArr* ds原创 2017-11-27 22:10:32 · 2671 阅读 · 0 评论 -
《学习OpenCV》第八章轮廓课后题8.3
用CvSeq的函数创建圆和矩形,这两个图像用点序列来表示。有关序列的读写方法可以自行学习,这里只给出一个示例#include #include #include using namespace std;using namespace cv;#define CVX_RED CV_RGB(0xff, 0x00, 0x00)#define CVX_GREEN CV_RGB(0原创 2017-12-06 20:20:20 · 346 阅读 · 0 评论 -
《学习OpenCV》第八章轮廓课后题
画一个圆,求轮廓,并用矩形逼近,求周长#include #include #include using namespace std;using namespace cv;#define CVX_RED CV_RGB(0xff, 0x00, 0x00)#define CVX_GREEN CV_RGB(0x00, 0xff, 0x00)#define CVX_BLUE原创 2017-12-06 22:35:41 · 354 阅读 · 0 评论 -
霍夫变换(直线和圆)
霍夫变换是一种在图像中寻找直线和圆及其它简单形状的方法。霍夫线变换原理:二值图像中的任何点都可能是一些直线集合的一部分,例如在原始图像上的一条直线表示为y = ax + b ,这是原始图像上以x和y为坐标系进行表示的,但是如果我们以a和b为新的变量坐标,那么在新的图像中,某一个点代表了所有过原始图像上点的直线。CvSeq * cvHoughLines2 (CvArr * image, vo原创 2017-12-01 16:38:55 · 517 阅读 · 0 评论 -
OpenCV 中腐蚀和膨胀
用手机拍摄同一场景的两张照片,拍摄位置略有不同。分别进行如下操作:1、src1 减去 scr2求绝对值=>diff122、对diff12先进行腐蚀,在进行膨胀操作;3、对diff12先进行膨胀,在进行腐蚀操作;#include #include #include #include #include #include using namespace std;usi原创 2017-11-22 16:08:06 · 1003 阅读 · 0 评论 -
OpenCV播放视频
使用opencv播放视频很容易,即循环的顺序读取视频中的每一帧,并且能够退出循环操作。#include #include #include using namespace std;using namespace cv;int main(int argc, const char * argv[]) { // insert code here... const char原创 2017-11-08 21:43:48 · 1363 阅读 · 0 评论 -
OpeCV 平滑处理一幅图像
图像的一个简单变化就是对图像进行平滑处理,通过对图像数据与高斯或者其他核函数进行卷积有效的减少图像信息内容。#include #include #include using namespace std;using namespace cv;int main(int argc, const char * argv[]) { // insert code here...原创 2017-11-09 08:34:13 · 205 阅读 · 0 评论 -
OpenCv-缩放比例为2的图像处理-cvPyrDown
使用cvPyrDown()完成创建一幅宽度和高度为输入图像一半尺寸的图像。#include #include #include using namespace std;using namespace cv;IplImage * doPyrDown(IplImage * in,int filter = CV_GAUSSIAN_5x5){ assert(in->width%原创 2017-11-09 22:56:10 · 1022 阅读 · 0 评论 -
OpenCV-CvMat的像素数据读取方法
#include #include #include using namespace std;using namespace cv;int main(int argc, const char * argv[]) { // insert code here... float vals[] = {0.866025,-0.500000,0.500000,0.866025}原创 2017-11-10 08:36:34 · 5888 阅读 · 0 评论 -
OpenCV三维图像的创建和数据遍历
创建一个如图所示的3 X 4 X 6三维矩阵#include #include #include using namespace std;using namespace cv;int main(int argc, const char * argv[]) { // insert code here... int sz[] = { 3, 4,原创 2017-11-13 08:36:48 · 9978 阅读 · 4 评论 -
OpenCV-Mat方式的获取图片的像素(一)
作为OpenCV基础知识中的重中之重,像素值的读写需要我们很用心的掌握。1、读取原图 const char filename[] = "/Users/linwang/Desktop/Lena.png"; Mat Im = imread(filename); cout<<"Im.dims = "<<Im.dims<<endl; cout<<"Im.rows =原创 2017-11-12 07:04:44 · 18212 阅读 · 0 评论 -
OpenCV-Mat方式获取图片的像素(二)
注意step是一个数组,随着维度会进行扩展,定义了矩阵的布局。#include #include #include using namespace std;using namespace cv;int main(int argc, const char * argv[]) { // insert code here... const char filename[原创 2017-11-13 22:55:36 · 647 阅读 · 0 评论 -
学习OpenCV第三章课后题(打卡)
P104 页第一题:#include #include #include using namespace std;using namespace cv;int main(int argc, const char * argv[]) { /*1.选取一个负的浮点数,取绝对值,四舍五入再取极值*/ float a = abs(-2.6); cout<<a<原创 2017-11-14 07:43:32 · 302 阅读 · 0 评论 -
FileStorage 文件读写操作
本片博客重点利用FileStorage 进行文件读写操作练习;创建一个common.hpp文件,存放结构体#ifndef common_hpp#define common_hpp#include #include #include #include typedef struct my_struct{ int m_value; CvPoint st_P原创 2017-11-20 17:37:30 · 10659 阅读 · 0 评论 -
学习OpenCV 第四章课后题第一题(合并图像、缩放、字体)
第一题:a:(1)从视频读入数据;(2):将输入数据转成灰度图像 (3):对图像做Canny边缘检测int main(int argc, const char * argv[]) { /*1.从视频文件读如数据*/ const char filename[] = "/Users/linwang/LinMovie/Wolf.mp4"; CvCa原创 2017-11-20 21:36:14 · 233 阅读 · 0 评论 -
OpenCV相应鼠标点击事件
本片博客出要参考《学习OpenCV》第四章内容,重点函数在代码中做了解释:#include #include #include #include using namespace std;using namespace cv;void my_mouse_callback(int event,int x, int y, int flags, void *param);CvRec原创 2017-11-21 07:44:30 · 1319 阅读 · 0 评论 -
OpenCV 中读取一张图片的像素点,并显示
1、读入并显示一张图像。当用户点击鼠标图像时,获取图像对应像素的(BGR),并在图像上点击鼠标处用文本将颜色值显示出来。#include #include #include #include #include #include using namespace std;using namespace cv;void my_mouse_callback(int event,in原创 2017-11-21 22:27:47 · 15729 阅读 · 6 评论 -
拉普拉斯变换
void cvLaplace(const CvArr * src,CvArr * det , int apertureSize=3)该函数通常把原图像和目标图像以及中孔大小作为变量。原图像可以是8位(无符号)图像,也可以是32位(浮点)图像。而目标图像必须是16位(有符号)或者32位(浮点)图像。这里的中孔与Sobel导数中出现的中孔完全一样。拉普拉斯算子通常可用于各种情况。一个原创 2017-12-01 10:22:53 · 1701 阅读 · 0 评论 -
图像的梯度和幅值
图像的梯度:梯度的方向是函数f(x,y)变化最快的方向,当图像中存在边缘时,一定有较大的梯度值,相反,当图像中有比较平滑的部分时,灰度值变化较小,则相应的梯度也较小,图像处理中把梯度的模简称为梯度,由图像梯度构成的图像成为梯度图像。练习《学习OpenCV》第六章第五题:创建一幅新图像,其中只有45度直线,背景为黑,直线为白。给出一系列中孔尺寸,我们将要得到图像的一阶x方向导数(dx)和一阶原创 2017-12-01 09:21:24 · 21938 阅读 · 1 评论 -
Canny算子
在Canny边缘检测法中,首先是在x和y方向求一阶导数,然后组合为4个方向的导数。这些方向导数达到局部最大值的点就是组成边缘的候选点。Canny算法中最重要的一个新特点就是其试图将独立边缘的候选像素拼装成轮廓。轮廓的形成是对这些像素运用滞后性阈值。这意味着有两个阈值,上限和下限。如果一个像素的梯度大于上限阈值,则被认为是边缘像素,如果低于下限阈值,则被抛弃,如果介于二者之间,只有当其与高于原创 2017-12-01 12:02:30 · 1471 阅读 · 0 评论 -
使用cvSmooth()函数以五种方式平滑图像
简单模糊、简单无缩放模糊、中值滤波、高斯模糊、双边滤波#include #include #include #include #include #include using namespace std;using namespace cv;int main(int argc, const char * argv[]) { /*使用cvSmooth多种方法平滑处原创 2017-11-22 11:38:07 · 4342 阅读 · 0 评论 -
图像局部与分割(一)
OpenCV中的采样函数cvInitLineIterator()和CV_NEXT_LINE_POINT(),可以很容易对任意直线上的像素进行采样。CVAPI(int) cvInitLineIterator(const CvArr* image,CvPoint pt1, CvPoint pt2, CvLine原创 2017-12-07 09:33:07 · 606 阅读 · 0 评论