-牧野-
这个作者很懒,什么都没留下…
展开
-
OpenCV Mat 图像处理基本操作
1. 图片加载、灰度图、 显示和保存cv::Mat img = cv::imread("01.jpg");//cv::Mat img = cv::imread("01.jpg", 0); //以灰度图读入 cv::cvtColor(img, img, cv::COLOR_BGR2GRAY); cv::imshow("img_show", img);cv::waitK...原创 2019-12-01 00:08:14 · 7393 阅读 · 0 评论 -
OpenCV 图像清晰度评价(相机自动对焦)
相机的自动对焦要求相机根据拍摄环境和场景的变化,通过相机内部的微型驱动马达,自动调节相机镜头和CCD之间的距离,保证像平面正好投影到CCD的成像表面上。这时候物体的成像比较清晰,图像细节信息丰富。相机自动对焦的过程,其实就是对成像清晰度评价的过程,对焦不准确,拍摄出来的图像清晰度低,视觉效果模糊,如果是在工业检测测量领域,对焦不准导致的后果可能是致命的;对焦准确的图像清晰度较高,层次鲜原创 2016-12-09 20:33:08 · 70193 阅读 · 14 评论 -
双目相机标定以及立体测距原理及OpenCV实现
单目相机标定的目标是获取相机的内参和外参,内参(1/dx,1/dy,Cx,Cy,f)表征了相机的内部结构参数,外参是相机的旋转矩阵R和平移向量t。内参中dx和dy是相机单个感光单元芯片的长度和宽度,是一个物理尺寸,有时候会有dx=dy,这时候感光单元是一个正方形。Cx和Cy分别代表相机感光芯片的中心点在x和y方向上可能存在的偏移,因为芯片在安装到相机模组上的时候,由于制造精度和组装工艺的影响...原创 2016-10-31 22:59:24 · 38992 阅读 · 12 评论 -
OpenCV调试利器——Image Watch插件的安装和使用
各大编译工具在调试的时候都可以实时查看变量的值,了解变量值的变动情况,在图像处理相关的程序调试中,是否也可以实时查看内存中图像变量的图形信息以及图像上指定区域或点位的数值变化情况呢?在工业机器视觉领域应用广泛的Halcon中,提供了一个程序设计界面HDevelop,HDevelop中有一个图像窗口,可以很方便的观察到随着程序运行图形的变化情况;以及包含一个图像数据和控制数据的小窗口,可以监测到...原创 2016-10-31 20:49:32 · 5982 阅读 · 10 评论 -
张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
使用Opencv实现张正友法相机标定之前,有几个问题事先要确认一下,那就是相机为什么需要标定,标定需要的输入和输出分别是哪些?相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像。相机标定的输入:标定图像上所有内角点的图像坐标,标定板图像上所有内角点的空间三维坐标(一般情况下...原创 2016-10-27 01:09:24 · 150216 阅读 · 145 评论 -
Opencv 张正友相机标定傻瓜教程
注: 程序所用的OpenCV版本是 2.4.10 ,3.0以上的版本可能会有不同先贴一下完整的工程代码:#include "opencv2/core/core.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/calib3d/calib3d.hpp"#include "opencv2/highgui/highgui.hpp...原创 2016-10-26 00:41:01 · 47626 阅读 · 78 评论 -
Opencv均值漂移pyrMeanShiftFiltering彩色图像分割流程剖析
meanShfit均值漂移算法是一种通用的聚类算法,它的基本原理是:对于给定的一定数量样本,任选其中一个样本,以该样本为中心点划定一个圆形区域,求取该圆形区域内样本的质心,即密度最大处的点,再以该点为中心继续执行上述迭代过程,直至最终收敛。可以利用均值偏移算法的这个特性,实现彩色图像分割,Opencv中对应的函数是pyrMeanShiftFiltering。这个函数严格来说并不是图像的分割,而原创 2016-09-29 23:52:36 · 35848 阅读 · 3 评论 -
使用Opencv中matchTemplate模板匹配方法跟踪移动目标
模板匹配是一种在图像中定位目标的方法,通过把输入图像在实际图像上逐像素点滑动,计算特征相似性,以此来判断当前滑块图像所在位置是目标图像的概率。在Opencv中,模板匹配定义了6种相似性对比方式: CV_TM_SQDIFF 平方差匹配法:计算图像像素间的距离之和,最好的匹配是0,值越大,是目标的概率就越低。 CV_TM_CCORR 相关匹配法:一种乘法操作;数值从小到大,匹配原创 2016-09-15 09:39:25 · 14650 阅读 · 7 评论 -
使用Opencv中均值漂移meanShift跟踪移动目标
Mean Shift均值漂移算法是无参密度估计理论的一种,无参密度估计不需要事先知道对象的任何先验知识,完全依靠训练数据进行估计,并且可以用于任意形状的密度估计,在某一连续点处的密度函数值可由该点邻域中的若干样本点估计得出。Mean shift将特征空间视为先验概率密度函数,那么输入就被视为是一组满足某种概率分布的样本点,这样一来,特征空间中数据最密集的地方,对应于概率密度最大的地方,且概率密原创 2016-09-28 23:02:50 · 9480 阅读 · 0 评论 -
Opencv光流运动物体追踪
光流的概念是由一个叫Gibson的哥们在1950年提出来的。它描述是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。那么所说的光流到底是什么鬼?简单来说,上图表现的就是光流,光流描述的是图像上每个像素点的灰度的位置(速度)变化情况,光流的研究是原创 2016-09-27 20:53:51 · 8993 阅读 · 0 评论 -
Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
Surf算法是一把牛刀,我们可以很轻易的从网上或各种Opencv教程里找到Surf的用例,把例程中的代码或贴或敲过来,满心期待的按下F5,当屏幕终于被满屏花花绿绿的小圆点或者N多道连接线条霸占时,内心的民族自豪感油然而生,仿佛屠龙宝刀在手,屁颠屁颠的很开心。如果对Surf的探究或者使用到此为止,我觉得只是用Surf这把牛刀吓唬了一个小鸡仔,万里长征才刚刚开始第一步,最少有三个问题需...原创 2016-09-21 23:18:49 · 8873 阅读 · 10 评论 -
Opencv 使用Stitcher类图像拼接生成全景图像
Opencv中自带的Stitcher类可以实现全景图像,效果挺不错。下边的例子是Opencv Samples中的stitching.cpp的简化,源文件可以在这个路径里找到:\opencv\sources\samples\cpp\stitching.cpp#include #include "opencv2/highgui/highgui.hpp"#include "openc原创 2016-09-24 21:16:04 · 21848 阅读 · 13 评论 -
Opencv Sift和Surf特征实现图像无缝拼接生成全景图像
环境: OpenCV2.4.13+VS2012Sift和Surf算法实现两幅图像拼接的过程是一样的,主要分为4大部分:1. 特征点提取和描述2. 特征点配对,找到两幅图像中匹配点的位置3. 通过配对点,生成变换矩阵,并对图像1应用变换矩阵生成对图像2的映射图像4. 图像2拼接到映射图像上,完成拼接过程1、2、3没啥好说的了,关键看看步骤4中的拼接部分。这里先...原创 2016-09-23 00:11:00 · 50142 阅读 · 32 评论 -
Opencv Surf算子特征提取与最优匹配
Opencv中Surf算子提取特征,生成特征描述子,匹配特征的流程跟Sift是完全一致的,这里主要介绍一下整个过程中需要使用到的主要的几个Opencv方法。1. 特征提取特征提取使用SurfFeatureDetector类中的detect方法,先定义一个SurfFeatureDetector类的对象,通过对象调用detect方法就可以提取输入图像的Surf特征。可以使用不带原创 2016-09-21 01:25:33 · 24674 阅读 · 10 评论 -
OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
1. 基于直方图均衡化的图像增强直方图均衡化是通过调整图像的灰阶分布,使得在0~255灰阶上的分布更加均衡,提高了图像的对比度,达到改善图像主观视觉效果的目的。对比度较低的图像适合使用直方图均衡化方法来增强图像细节。彩色图像的直方图均衡化实现:#include #include #include using namespace cv;int main原创 2016-12-15 23:46:19 · 97360 阅读 · 25 评论 -
OpenCV 图像白平衡算法(相机自动白平衡)
彩色相机内部有三个CCD电子耦合元件,分别用来感受红绿蓝三中颜色的光线,默认情况下,三个颜色的感光电路信号的放大比例是1:1:1的。在理想的拍摄环境下,纯白色的RGB分量按照1:1:1的比例放大之后,得到的是没有偏色的白色,当在非理想的环境光条件下,白色成像出来的效果会偏向环境光的颜色,而不是纯白色。相机的自动白平衡就是要通过改变RGB感光电路信号的放大比例,让受环境光影响的白色还原成原创 2016-12-09 22:50:49 · 37018 阅读 · 5 评论 -
OpenCV图像修复
在OpenCV的“photo.hpp”中定义了一个inpaint函数,可以用来实现图像的修复和复原功能,inpaint函数的原型如下:void inpaint( InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRadius, int flags )原创 2016-12-21 23:13:45 · 13993 阅读 · 9 评论 -
OpenCV C++ 遍历文件夹下所有文件
如题。一、获取完整路径#include <opencv2\opencv.hpp>#include <string>int main(int argc, char* argv[]) { std::string folder_path = "D:\\database\\test\\*.*"; //path of folder, you can r...原创 2019-08-15 19:05:42 · 4944 阅读 · 2 评论 -
OpenCV-Python在图片上输出中文
OpenCV中在图片上输出中文一般需要借助FreeType库实现。FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件。但使用FreeType需要下载库并重新编译,过程麻烦一点。在Python中,可以借助PIL(Python Imaging Library)模块实现,相对简单很多,需要做的只是对图像进行OpenCV格式和PIL格式的相互原创 2018-01-19 21:42:22 · 23360 阅读 · 11 评论 -
python中PIL.Image和OpenCV图像格式相互转换
PIL.Image转换成OpenCV格式import cv2from PIL import Imageimport numpyimage = Image.open("plane.jpg")image.show()img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)cv2.imshow("OpenCV",img)c...原创 2017-10-01 13:16:45 · 76012 阅读 · 3 评论 -
Ubuntu+anaconda环境里安装opencv
在Ubuntu的Anaconda环境下安装OpenCV比较方便,直接在终端中输入以下命令:conda install --channel https://conda.anaconda.org/menpo opencv这个方式安装的是OpenCV2.4.11版本,如果要安装OpenCV 3版本,把上述命令中的 opencv换成 opencv3就行了,安装的是3.2.0版本...原创 2017-09-13 22:37:23 · 24245 阅读 · 8 评论 -
OpenCv-Python 图像处理基本操作
1. 图片加载、显示和保存import cv2img = cv2.imread("01.jpg")imgGrey = cv2.imread("01.jpg",0)cv2.imshow("img",img)cv2.imshow("imgGrey",imgGrey)cv2.waitKey()cv2.imwrite("Copy.jpg",img)2. 图像显示窗口创建与销毁...原创 2017-12-16 09:30:44 · 17208 阅读 · 4 评论 -
Python判断unicode是汉字,数字,英文,或者其他字符
功能:判断unicode是否是汉字,数字,英文,或者是否是(汉字,数字和英文字符之外的)其他字符。全角、半角符号相互转换。全角、半角?全角--指一个字符占用两个标准字符位置。汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符。一般的系统命令是不用全角字符的,只是在作文字处理时才会使用全角字符。半角原创 2018-02-01 19:17:41 · 10530 阅读 · 0 评论 -
Windows下Python2.7配置OpenCV2.4.10
所需文件:1 Python2.7.13 链接: https://www.python.org/downloads/release/python-2713/ 这里选Windows 64位的安装包。2 pip9.0.1 链接: https://pypi.python.org/pypi/pip#downloads pip是一个安装和管理Python包的工具,下边的numpy会用到pip原创 2017-06-19 20:36:42 · 14355 阅读 · 4 评论 -
OpenCV绘制朱利亚(Julia)集合图形
朱利亚集合是一个在复平面上形成分形的点的集合。以法国数学家加斯顿·朱利亚(Gaston Julia)的名字命名。朱利亚集合可以由下式进行反复迭代得到:对于固定的复数c,取某一z值(如z = z0),可以得到序列 这一序列可能反散于无穷大或始终处于某一范围之内并收敛于某一值。我们将使其不扩散的z值的集合称为朱利亚集合。以下使用OpenCV编码绘制J原创 2017-02-03 20:50:20 · 5718 阅读 · 0 评论 -
CUDA二维纹理内存+OpenCV图像滤波
CUDA和OpenCV混合编程,使用CUDA的纹理内存,实现图像的二值化以及滤波功能。#include #include #include using namespace cv;int width = 512;int height = 512;// 2维纹理texture texRef;// 核函数__global__ void transformKerne原创 2017-02-08 21:04:09 · 3993 阅读 · 2 评论 -
OpenCV dll 源码调试—附加到进程
使用CMake可以生成OpenCV源码的解决方案,然后就可以对OpenCV函数进行修改,功能剪切等操作了,对这部分内容感兴趣的可以浏览一下上一篇文章:CMake生成OpenCV解决方案&&编译OpenCV源码自己修改过的函数实现可能有Bug,或者我们想跟踪查看DLL被别的程序调用时候的运行情况,这个时候就可以用到VS编译器的一个调试功能—“附加到进程”。例如对于OpenCV原创 2017-01-07 21:40:02 · 2906 阅读 · 0 评论 -
CMake生成OpenCV解决方案&&编译OpenCV源码
生成OpenCV工程需要用到CMake,所以第一步需要下载CMake软件,下载链接:CMake下载目前最新的版本是3.7.1,这里选择下载Platform下的Windows win32-x86 ZIP,大小21M:把下载完成的压缩包解压出来就可以了,不用安装。打开解压后的路径下…\cmake-3.7.1-win32-x86\bin\cmake-gui.exe,会弹出如下原创 2017-01-05 21:57:09 · 19614 阅读 · 5 评论 -
OpenCV实现马赛克和毛玻璃滤镜效果
一、马赛克马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替,这样可以模糊细节,但是可以保留大体的轮廓。以下OpenCV程序实现马赛克效果,通过鼠标左键在图像上划定马赛克的矩形框。#include #include using namespace cv;Mat imageSourceCopy; //原始图像Mat imageSo原创 2016-12-19 22:48:25 · 9034 阅读 · 2 评论 -
Surf算法特征点检测与匹配
Speeded Up Robust Features(SURF,加速稳健特征),是一种稳健的局部特征点检测和描述算法。最初由Herbert Bay发表在2006年的欧洲计算机视觉国际会议(Europen Conference on Computer Vision,ECCV)上,并在2008年正式发表在Computer Vision and Image Understanding期刊上。Surf原创 2016-09-20 23:53:54 · 113070 阅读 · 24 评论 -
Opencv目标跟踪—CamShift算法
CamShift算法全称是“Continuously Adaptive Mean-Shift”(连续的自适应MeanShift算法),是对MeanShift算法的改进算法,可以在跟踪的过程中随着目标大小的变化实时调整搜索窗口大小,对于视频序列中的每一帧还是采用MeanShift来寻找最优迭代结果,至于如何实现自动调整窗口大小的,可以查到的论述较少,我的理解是通过对MeanShift算法中零阶矩的判原创 2016-10-09 23:03:18 · 34287 阅读 · 10 评论 -
Opencv中使用Surf特征实现图像配准及对透视变换矩阵H的平移修正
图像配准需要将一张测试图片按照第二张基准图片的尺寸、角度等形态信息进行透视(仿射)变换匹配,本例通过Surf特征的定位和匹配实现图像配准。配准流程:1. 提取两幅图像的Surf特征2. 对Surf特征进行匹配,找到最匹配的特征点对3. 提取最优配对点的坐标,生成透视变换矩阵4. 对测试图像经过透视变换,生成配准图像以下是Opencv代原创 2016-09-22 22:57:16 · 19635 阅读 · 9 评论 -
形态学边界提取
Opencv中函数getStructuringElement()可以生成形态学操作中用到的核,函数原型:Mat getStructuringElement(int shape, //核的形状 0:矩形 1:十字交叉形 2: 椭圆 Size ksize,//核大小 Point anchor=Point(-1,-1) //核中心位置,默认位于形状中心处原创 2016-08-01 21:58:03 · 14901 阅读 · 1 评论 -
Opencv保存摄像头视频&&各种编码器下视频文件占用空间对比
打开视频文件或摄像头视频需要使用Opencv中的VideoCapture类,保存视频或摄像头视频到本地磁盘,需要使用Opencv中的VideoWriter类,使用都很简单,这篇文章就记录一下VideoWriter类的用法,主要关注一下VideoWriter在不同编码方式下保存视频文件大小的区别。VideoWriter类的一个常用构造方式如下:VideoWriter(const st原创 2016-08-16 00:05:49 · 14179 阅读 · 6 评论 -
Opencv函数setMouseCallback鼠标事件响应
Opencv中setMouseCallback()创建了一个鼠标回调函数,每次在图像上单击鼠标左键再抬起的过程,都会分3次调用鼠标响应函数,并且响应顺序是:1.左键单击按下;2.左键单击抬起;3.鼠标指针位置移动(即使原地单击,鼠标位置并没有移动);原创 2016-07-30 01:23:25 · 27391 阅读 · 5 评论 -
90年代经典“手游”—拼图板小游戏Opencv实现
80后可能还对儿时玩过的一种经典木质的拼图板游戏记忆犹新,一般是一种4*4或5*5规格的手持活动板,通过挪动每个小板子的位置,拼出来板子上完整的图像,那时候还没有网吧,手机也还是大哥大的天下,所以这也可以算得上是最早的“手游”了吧……简单的就是经典的,现在的Windows 7小工具里还保留了这个小游戏,当然你可能从来没有留意过~,就是下边的这个: 可以在控制面板->外原创 2016-07-29 22:16:56 · 4369 阅读 · 2 评论 -
OpenCV坐标系与操作像素的四种方法
像素是图像的基本组成单位,熟悉了如何操作像素,就能更好的理解对图像的各种处理变换的实现方式了。1.at方法第一种操作像素的方法是使用“at”,如一幅3通道的彩色图像image的第i行j列的B、G、R分量分别表示为:image.at(i,j)[0];image.at(i,j)[1];image.at(i,j)[2];而对于单通道的灰度图像就简单很多了:image.at(i原创 2016-07-06 23:53:07 · 23651 阅读 · 7 评论 -
图像直方图和反向投影的肤色检测
肤色的检测可以利用肤色的HSV模型,通过计算图像的HSV模型中肤色的H和S分量中的一个或两个的直方图,再用该直方图反向投影至原图像,定位出肤色。HSV颜色模型:RGB模型是图像处理中常用的颜色模型,多用于颜色显示和图像处理,三维坐标中H(Hue)代表色调,S(Saturation)代表饱和度,V代表(Value)明度,理解起来很容易,是一种针对用户观感的一种颜色模型,侧重于原创 2016-07-28 22:38:11 · 3241 阅读 · 3 评论 -
opencv直方图该怎么画
图像直方图是反映图像中像素分布特性的统计表,一般显示如下:其中横坐标代表的是图像像素的种类,或者说是灰度级,纵坐标代表的是每一级灰度下像素数或者该灰度级下像素数在所有图像总像素数总所占的百分比。直方图反映了图像像素的整体分布,是图像的一个很重要的特征,直方图处理也是很多空间域图像处理的基础,在特征提取,图像增强,图像匹配等方面都占有一席之地。直观上看,若直方图的分量主要集中在左原创 2016-07-27 22:04:07 · 3803 阅读 · 2 评论 -
Opencv中视频播放与进度控制
视频画面本质上是由一帧一帧的连续图像组成的,播放视频其实就是在播放窗口把一系列连续图像按一定的时间间隔一幅幅贴上去实现的。人眼在连续图像的刷新最少达到每秒24帧的时候,就分辨不出来图像间的闪动了,使人感觉呈现出来的是连续的画面,视频的播放就是利用了这一点。我们知道,电影被称为“24帧的艺术”,意思就是电影画面每秒刷新24帧,即每秒显示24副图像,它的帧率(Frames per Second原创 2016-07-27 20:46:38 · 8662 阅读 · 1 评论