opencv学习
SunnyFish-ty
学习学习再学习!
展开
-
opencv中SiftDescriptorExtractor所做的SIFT特征向量提取工作简单分析
SiftDescriptorExtractor对应于SIFT算法中特征向量提取的工作,通过他对关键点周围邻域内的像素分块进行梯度运算,得到128维的特征向量。具体有如下几个操作:0、首先,我们假设在之前关键点提取的步骤中,我们对一个三角形提取关键点,检测到其中一个关键点的坐标为三角形的一个角(如下面用红圈圈出的),如下图放大看,假设检测到该关键点的方向如下图:转载 2018-01-03 14:53:39 · 1380 阅读 · 0 评论 -
opencv实现两幅图叠加
第一种方法用到的是addWeighted函数,函数的用法见下图:然后自己写了一份测试代码,其中src是大图,wifiLogo是小图,程序和效果见下图:第二种方法是使用图像的掩模:掩模:用选定的图像、图形或物体,对待处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。用于覆盖的特定图像或物体称为掩模或模板。光学图像处理中,掩模可以足胶片、滤光片等。数字图像处理中,掩模为二维矩阵数组,有...转载 2018-07-12 15:10:41 · 11218 阅读 · 0 评论 -
opencv中的灰度变换
本文介绍的图像的灰度变换则不同,其对像素的计算仅仅依赖于当前像素和灰度变换函数。灰度变换也被称为图像的点运算(只针对图像的某一像素点)是所有图像处理技术中最简单的技术,其变换形式如下:s=T(r)s=T(r)其中,T是灰度变换函数;r是变换前的灰度;s是变换后的像素。图像灰度变换的有以下作用:改善图像的质量,使图像能够显示更多的细节,提高图像的对比度(对比度拉伸)有选择的突出图像感兴趣的特征或者抑...转载 2018-07-13 14:13:54 · 4098 阅读 · 1 评论 -
opencv中对视频和视频的操作VideoCapture
一、介绍视频读取本质上就是读取图像,因为视频是由一帧一帧图像组成的。1秒24帧基本就能流畅的读取视频了。 ①读取视频有两种方法: A. VideoCapture cap; cap.open(“1.avi”); B. VideoCapture cap(“1.avi”);②循环显示每一帧: while(1) { Mat frame; //定义Mat变量,用来存储每一帧 ca...转载 2018-07-25 14:24:13 · 6078 阅读 · 0 评论 -
OpenCV3.2版本下的Mat和IplImage相互转换
IplImage是计算机视觉处理数字图像的一种重要的抽象数据类型,最初来源于Intel公司的IPL(Image Processing Library)库。OpenCV1.0在实现该数据类型时使用了C语言风格的结构体,在以后高版本的OpenCV库中,该结构体得以保留。 IplImage作为初代OpenCV的最主要的抽象数据类型,在今时今日,仍然有很大的影响力,由于很多嵌入式设备只支持C语言,因此,...转载 2018-08-09 09:51:39 · 1632 阅读 · 0 评论 -
opencv+freetype
OpenCV版本一直在更新,但至今依然没有往图像中添加中文注释的功能函数,本文基于freetype和OpenCV向读者推荐一种图像写入中文的方法。一、下载freetype库并配置1、从 http://download.savannah.gnu.org/releases/freetype/ 下载freetype库。例如下载freetype-2.7.tar.gz文件,在windows下解压...原创 2018-08-08 17:59:15 · 4465 阅读 · 2 评论 -
打包发布的程序无法使用videocapture打开视频
opencv videocapture读取视频编译通过,但运行时调用isOpened()返回false。沿着代码一步步Debug进去,发现如下代码:CvCapture* cvCreateFileCapture_FFMPEG_proxy(const char * filename){ CvCapture_FFMPEG_proxy* result = new CvCapture_FFM...转载 2018-08-23 15:42:16 · 1029 阅读 · 1 评论 -
opencv实现png图片叠加边缘透明问题
原图:png图:结果:实现代码如下:void main(){ cv::Mat srcImg=cv::imread("E://srcImg.jpg"); cv::namedWindow("srcImg"); cv::imshow("srcImg",srcImg); cv::waitKey(0); cv::Mat logo=cv:...原创 2018-10-26 15:03:27 · 2786 阅读 · 1 评论 -
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Mat矩阵点乘——A*BOpencv重载了运算符“*”,姑且称之为Mat矩阵“点乘”,其中一个重载声明为:CV_EXPORTS MatExpr operator * (const Mat& a, const Mat& b);点乘说明:1. A*B是以数学运算中矩阵相乘的方式实现的,即Mat矩阵A和B被当做纯粹的矩阵做乘法运算,这就要求A的列数等 ...原创 2018-12-04 10:49:56 · 3159 阅读 · 0 评论 -
opencv实现多图像简单拼接
先直接上代码,文末会有具体分析,代码也有相应注释。本文是以三张图片横向排列拼接为例 ,其他的也是类似IplImage* paletteImageRam1, paletteImageRam2, paletteImageRam3; //此处是定义了三个图片,实际使用时应当载入自己的三幅图片//将三个图片拼接在一起double width,height;width = double(paletteI...转载 2018-07-12 15:09:38 · 4259 阅读 · 0 评论 -
cvAddWeighted的使用
cvAddWeighted( ) 是opencv中,将两个图片矩阵进行融合的一个很好的函数,可以得到很多有趣的效果。其函数原型如下:void cvAddWeighted( const CvArr* src1, double alpha,const CvArr* src2, double beta,double gamma, CvArr* dst );src1 第一个原数组. alph...转载 2018-07-12 09:53:09 · 1459 阅读 · 0 评论 -
QString与string的相互转换
1.QString转换Stringstring s = qstr.toStdString();2.String转换QStringQString qstr2 = QString::fromStdString(s);原创 2018-06-13 16:03:46 · 105169 阅读 · 3 评论 -
opencv中keypoint数据结构分析
分析opencv中keypoint数据结构的相关信息,找到opencv的document(http://docs.opencv.org/java/org/opencv/features2d/KeyPoint.html)。可以看到KeyPoint这数据结构中有如下数据结构:angle:角度,表示关键点的方向,通过Lowe大神的论文可以知道,为了保证方向不变形,SIFT算法通过对关键点周围邻域转载 2018-01-03 14:46:05 · 1146 阅读 · 0 评论 -
OpenCV Mat数据类型指针ptr的使用
cv::Mat image = cv::Mat(400, 600, CV_8UC1); //宽400,长600 uchar * data00 = image.ptr(0); uchar * data10 = image.ptr(1); uchar * data01 = image.ptr(0)[1];1234解释:定义了一个Mat变量image。data00转载 2018-01-03 16:34:41 · 9602 阅读 · 1 评论 -
OpenCV参考手册之Mat类详解
译文参考The OpenCV Reference Manual (Release 2.3)August 17 2011Mat::eye返回一个恒等指定大小和类型矩阵。C++: static MatExpr Mat::eye(int rows, int cols, inttype)C++: static MatExpr Mat::eye(Size size, in转载 2018-01-03 19:21:26 · 288 阅读 · 0 评论 -
opencv3.0以后CvMat与Mat类型转换
Mat image=imread("E://QtProject//opencvLearning//data//op2.jpg", 0); CvMat gray=image; CvMat* b=&gray; Mat gray2(b->rows,b->cols,b->type,b->data.fl);原创 2018-01-05 11:00:01 · 4579 阅读 · 6 评论 -
opencv中用RNG产生随机数
产生随机数是编程中经常用到的操作,特别在进行初始化的时候需要赋一些随机值。C和C++中产生随机数的方法如rand()、srand()等在OpenCV中仍可以用。此外,OpenCV还特地编写了C++的随机数类RNG,C的随机数类CvRNG,还有一些相关的函数,使用起来更加方便。下面,一一介绍。说明关键字前带cv的都是C里的写法,不带cv的是C++里的写法,比如Cv转载 2018-01-05 14:00:55 · 21652 阅读 · 3 评论 -
使用imwrite调整保存的图片质量
近日在用opencv做一些图像处理的操作时,需要对一些高分辨率的图像进行保存。比如,在操作一个容量为230M的图像后,并对该图像保存为JPG格式后,发现图像容量变为80M了!针对这个问题,忙了大半天,到处翻阅资料,终于知道为什么了。先举个例子说明自己遇到的问题,为了看出效果,我特意用了一个高分辨率的图片做实验。比如我有如下的一个233M的图片经过下面的程序读进内存,再次保存后,图片容量就急剧变小了转载 2018-01-17 19:32:36 · 9420 阅读 · 0 评论 -
区域生长算法原理-matlab代码实现
1. 基于区域生长算法的图像分割原理数字图像分割算法一般是基于灰度值的两个基本特性之一:不连续性和相似性。前一种性质的应用途径是基于图像灰度的不连续变化分割图像,比如图像的边缘。第二种性质的主要应用途径是依据实现指定的准则将图像分割为相似的区域。区域生长算法就是基于图像的第二种性质,即图像灰度值的相似性。1.1 基本公式令R表示整幅图像区域,那么分割可以看成将区域R划分为n个子区域R1,,R2,....转载 2018-03-29 13:56:58 · 13570 阅读 · 1 评论 -
opencv保存视频的每一帧
视频的读取主要利用了OpenCV中的VideoCapture类。视频读入到VideoCapture类对象capture之后,利用一个循环将每一帧图像保存到电脑上。#include <opencv2/opencv.hpp>#include <tchar.h> #include <stdio.h> #include <iostream> #inclu...原创 2018-06-12 17:34:21 · 2926 阅读 · 0 评论 -
opencv利用HSV图像进行颜色筛选
目标在本教程中,您将学习如何:使用OpenCV cv :: inRange函数执行基本阈值操作。基于HSV颜色空间中的像素值范围来检测对象。原理在上一个教程中,我们学习了如何使用cv :: threshold函数执行阈值处理。在本教程中,我们将学习如何使用cv ::inRange函数来完成它。概念保持不变,但现在我们添加了一系列我们需要的像素值。HSV色彩空间HSV(色相/饱和...转载 2019-05-24 10:36:27 · 26698 阅读 · 2 评论