OpenCV
基于 OpenCV 的相关图像算法
ShaderJoy
醉心于研究一些特效(用代码来画画),曾涉猎过图形图像视频处理 、计算机视觉 、增强现实/虚拟现实等技术领域,就职于美图。
展开
-
OpenCV 的 Non Local Means(CUDA 版) 源码解析
效果如图:非局部均值滤波(Non Local Means)算法其出发点是——在同一幅图像中对具有相同性质的区域进行分类并加权平均得到的图片,应该降噪效果也会越好。意味着它使用的是图像中的所有像素(实际上是在一个搜索窗口内的所有像素),这些像素根据某种相似度进行加权平均。与双线性滤波、中值滤波等利用图像局部信息来滤波不同,它利用了整幅图像进行去噪。即以图像块(邻域)为单位在图像中寻找相...原创 2019-02-28 13:57:21 · 2892 阅读 · 0 评论 -
联合双边滤波器(joint bilateral filter)【OpenCV】
转载自:pplong的博客前面介绍了双边滤波器(bilateral filter,LBF),然而BF的权值是不稳定的,因此在边缘附近会出现一些翻转。此外BF计算复杂度是O(r^2);为了改善BF权值的稳定性,引入了联合双边滤波器(joint bilateral filter ,LBF)。两者之间的差别就是JBF用了一个导向图作为值域权重的计算依据。下面我们通过数学公式展示二者的不同:先看B原创 2016-10-17 15:46:35 · 23817 阅读 · 10 评论 -
Coherence-Enhancing Shock Filters 代码及详细注释【OpenCV】
本文代码参考自博客原作者论文下载地址// CoherenceFilter.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace cv;/* ==============================================* Coherence-Enhancing Shoc原创 2016-10-16 02:39:19 · 2561 阅读 · 0 评论 -
图像等比例缩小【OpenCV】
原图:1000 * 667C++代码(代码较简单,意在抛砖引玉):nt main(){ cv::Mat img = cv::imread("../Daniel Norris.jpg", 0); int w = img.cols; int h = img.rows; float t = 1.; //int dst_w = 640...原创 2016-11-05 00:36:45 · 8826 阅读 · 0 评论 -
基于Permutohedral Lattice 的Bilateral filter 源码及部分注释【C++】
基于Permutohedral Lattice 的Bilateral filter 源码及部分注释【来自于网络】实现基于论文《Fast High-Dimensional Filtering Using the Permutohedral Lattice》 .1.bilateralPermutohedral 方法:static Mat bilateralPermuto原创 2016-10-22 15:11:17 · 4311 阅读 · 2 评论 -
泊松分布采样 (Poisson-Disk-Sample)代码及详细注释【OpenCV】
算法步骤简述关键代码如下:// 以center为圆心radius为半径的圆环范围内随机产生新的采样点template<unsigned int N, class T>void sample_annulus(T radius, const Vec<N, T> ¢re, unsigned int &seed, Vec<N, T>...原创 2016-09-23 18:50:11 · 19898 阅读 · 7 评论 -
ShaderJoy —— “Kuwahara”的实现 【OpenCV】【GLSL】
本文代码参考自skelking的一篇博客 《kuwahara filter 实现》Kuwahara 是一种降噪低通滤波器,能够较好的保留物体的边缘。相对于双边滤波和 Mean Shift 等传统的保边滤波器 (它们的缺点:对于高对比度图像,因为使用了阈值,要么不执行抽象,要么删除了相关信息而可能会导致它们失败。对于低对比度的图像,通常由于删除了太多的信息而导致失败),Kuwahara 即使...原创 2016-08-11 19:06:15 · 4732 阅读 · 0 评论 -
ShaderJoy —— “Floyd Steinberg 抖动” 的实现 【OpenCV】【GLSL】
算法参考自:https://en.wikipedia.org/wiki/Floyd–Steinberg_dithering (算法很简单,维基百科解释的相当精炼!)http://blog.csdn.net/mathsoperator/article/details/7585898OpenCV的效果图:用OpenCV实现起来也是非常简单的!如下所示:...原创 2016-08-18 22:33:25 · 8032 阅读 · 4 评论 -
opencv上Gamma调节的源码
这周单位要做一个人脸美化的项目,查资料遇到这位大牛的博客,地址如下:点击打开链接我的代码也是在他的基础上进行修改的,但是他对图像的RGB三个通道平等调节,为了适应我的需求,我改成了针对三个通道分别调节。废话不多说,开始上源码void ImageAdjust(Mat& src, Mat& dst, vector low_in, vector high_in, v原创 2014-05-23 17:36:31 · 3383 阅读 · 1 评论 -
【新】opencv肤色检测源码
//第一种:RGB color space 【效果挺好】// skin region location using rgb limitationvoid ImageSkin::ImageSkinRGB(const Mat& rgb, Mat& _dst){ assert(rgb.channels() == 3 && _dst.channels() == 3); static原创 2014-05-23 18:05:03 · 3108 阅读 · 4 评论 -
openFrameworks使用ofxOpencv进行肤色检测
由于ofxOpencv里的ofxCVColorImage是RGB格式的,没想到调用getCvImage()函数得到的IplImage居然也是RGB格式,结果害得我一开始肤色检测的结果十分诡异。。。作者也够懒的,这么简单居然也不做个转换!这个就是调换RB通道的代码:void testApp::cvRGB_or_BGR(IplImage* src_image, IplImage* dst_im原创 2014-02-27 14:56:19 · 2975 阅读 · 0 评论 -
自适应直方图均衡(CLAHE) 代码及详细注释【OpenCV】
理论请参考博客OpenCV源码的本地路径: %OPENCV%\opencv\sources\modules\imgproc\src\clahe.cppclahe.cpp// ----------------------------------------------------------------------// CLAHEnamespace{ class C原创 2016-10-18 21:24:41 · 27861 阅读 · 2 评论 -
联合双边滤波器(joint bilateral filter) 代码及详细注释【OpenCV】
原理部分可以参看前一篇博客void jointBilateralFilter(const Mat &src, Mat &dst, int d, double sigma_color, double sigma_space, Mat &joint = Mat(), int borderType =原创 2016-10-19 11:52:15 · 14001 阅读 · 16 评论 -
OpenCV 的 Contrast Preserving Decolorization 源码解析
运行效果为:出乎我意料的是,不仅仅保留了对比度,居然还增强了图像的对比度(去雾,不过只适用于比较均匀的雾),不过运行的速度堪忧,500*500的图像都需要 1s 多!经过OpenMP 优化,执行时间减少了一半左右该代码是源于香港中文大学计算机科学与工程系 的一篇论文Contrast Preserving Decolorization其代码已被收录到 Op...原创 2019-02-27 16:56:04 · 1848 阅读 · 0 评论 -
<Example_MarkerBasedAR>中Marker.cpp的源码与详细中文注释
/***************************************************************************** * Marker.cpp * Example_MarkerBasedAR *****************************************************************************原创 2013-10-23 17:31:01 · 2833 阅读 · 0 评论 -
基于人脸关键点的姿态定位【OpenCV】【OpenGL】
右侧实心点为人脸实际关键点,空心点为重投影后的关键点;左侧为根据姿态投影的3维人头模型原创 2017-06-08 22:35:55 · 4352 阅读 · 6 评论 -
cvMatMulAdd即cvGEMM的define
GEMM通用矩阵乘法void cvGEMM( const CvArr* src1, const CvArr* src2, double alpha,const CvArr* src3, double beta, CvArr* dst, int tABC=0 );#define cvMatMulAdd( src1, src2, src3, dst ) cvGEMM( src1, src2转载 2013-03-02 19:46:50 · 2015 阅读 · 0 评论 -
三维姿态估计:关于solvePnP与cvPOSIT
原博客:http://blog.csdn.net/abc20002929/article/details/8520063之所以写:场景:给定物体3D点集与对应的图像2D点集,之后进行姿态计算(即求旋转与位移矩阵)。在翻阅opencv api时看到这2个函数输出都是旋转与位移,故做简单分析并记录于此。官方解释:solvePnP(http://docs.open转载 2013-09-25 16:17:36 · 6303 阅读 · 0 评论 -
ImageMagick 的 Image 和 OpenCV 的 cv::Mat 如何转换
仅以 BGR 格式为例:一、cv::Mat -> ImageImage Mat2Magick(const cv::Mat& img ) { Image mgk(img.cols, img.rows, "BGR", MagickCore::CharPixel, (char *)img.data); return mgk; } 二、Image -> cv::Mat原创 2017-05-09 10:02:10 · 2122 阅读 · 0 评论 -
OpenCV 释放 vector 内存莫名崩溃的问题
当我想通过 swap 释放成员变量的 vector的内存时,总是Crash,断点进去Crash的位置也很诡异:Crash 位置 :还以为是内存没有对齐的问题,结果加了 #pragma pack(4) // 1, 2, 4也是枉然。。。 T_T 局部变量vector的自动释放 Crash 位置: 而且同样的代码在OpenCV 3.1.0上是正常...原创 2017-04-13 15:35:32 · 5622 阅读 · 0 评论 -
简单的 AR 效果实现【OpenGL】【OpenCV】
说明:通过笔记本摄像头实时采集现场画面,当程序检测到模板图像(手机相册中的照片)时,显示一个带纹理的立方体。其实类似的代码是三年前写的,只不过当时用的GL 1.X,现在只是修改 GL 的代码,改为支持 Shader而已。OpenCV的检测算法还有待优化,抖动比较明显,但是毕竟是三年前写的,要花点时间看看。还有一些新的 bug 有待 fix。效果如图:1.没有特效的纹理立方体:2. 带简单马赛克特效原创 2017-01-15 00:11:04 · 8763 阅读 · 4 评论 -
多线程本地图片加载示例【OpenCV】【Pthread】
Pthread barrier的简单使用示例:C++代码如下:// ThreadingLoadImages.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #define THREADS 3// Barrier variablepthread_barrier_t barr;struct Param{原创 2016-11-18 15:14:43 · 3735 阅读 · 0 评论 -
L0 范数图像平滑(L0 Smooth) 代码及详细注释 【OpenCV】
原理可以参考原作者的论文以及这位大神写的博客OpenCV 实现话不多说,附上C++代码cv::Mat L0Smoothing(cv::Mat &im8uc3, double lambda = 2e-2, double kappa = 2.0) { // convert the image to double format int row = im8uc3.row...原创 2016-10-15 20:54:21 · 9236 阅读 · 8 评论 -
opencv 实现图像倒影(渐变)效果【源码】
opencv 实现图像倒影(渐变)效果【源码】原创 2014-01-06 17:33:48 · 3865 阅读 · 0 评论 -
如何配置ofxFaceTracker的AdvancedExample例子【更新】
我使用的OpenFrameworks的版本是of_v0.7.4_vs2010_release,所以IDE是VS2010【最新版的OF是of_v0.8.0_vs_release,对应的VS是2012】首先,将从https://github.com/kylemcdonald/ofxFaceTracker上下载的ofxFaceTracker解压到OF的example目录下,得到ofxFace原创 2013-12-17 18:32:13 · 4815 阅读 · 12 评论 -
AR Video Demo
演示视频地址:AR Video Demo功能简介:通过电脑摄像头识别事先指定的模板图像,实时跟踪模板图像的移动(可以忍受大约45°的倾斜和360°的旋转),并渲染上视频帧演示截图:未完待续....原创 2013-10-05 11:01:53 · 2089 阅读 · 0 评论 -
OpenCV学习笔记(十五)——摄像机的标定和3D重建calib3D
原博客地址先简单回顾一下计算机视觉的知识。这里研究生的摄像机模型都是针孔摄像机,摄像机的标定问题是CV领域的一个入门级的问题,初学摄像机标定时会被各种坐标系弄晕,这里再介绍一下,常提到的坐标系有四个:世界坐标系(Ow,以空间一点为原点)摄像机坐标系(Oc以小孔即光心为原点)图像物理坐标系(O1以像平面中心为原点)图像像素坐标系(O以像平面左下角为原点)这转载 2013-08-29 16:17:56 · 15819 阅读 · 0 评论 -
opencv常用的基础小工程
文章出自本文中将列出opencv需常用的最小工程,以方便今后做测试用。 工程环境为vs2010+opencv2.3.1一、opencv读取图片并显示出来:#include "stdafx.h" #include using namespace cv; int main(int argc,unsigned char* argv[]) {转载 2013-05-14 15:10:47 · 2232 阅读 · 0 评论 -
Master OpenCV with Pratical Computer Vision Projects——如何编译Cartoonifier_Android
我的环境及对应的保存路径如下:Cygwin——【C:\Cygwin_】android-ndk-r9——【C:\Work\android-ndk-r9】OpenCV-2.4.6-android-sdk——【C:\Work\OpenCV4Android\OpenCV-2.4.6-android-sdk】具体步骤如下:首先,将Cartoonifier_Android和Cartoo原创 2013-08-21 14:40:45 · 3654 阅读 · 10 评论 -
cvReshape和cvGetMat的使用心得
问题场景:我需要从一幅图像中截出一小块,把它转成一维向量。开始是这样做的IplImage *result;CvSize size;size.width=rectInImage.width;size.height=rectInImage.height;result=cvCreateImage( size, orgImage->depth, orgImage->nChannel转载 2013-08-19 16:18:24 · 4044 阅读 · 0 评论 -
再谈OpenCV数据结构Mat详解
我记得开始接触OpenCV就是因为一个算法里面需要2维动态数组,那时候看core这部分也算是走马观花吧,随着使用的增多,对Mat这个结构越来越喜爱,也觉得有必要温故而知新,于是这次再看看Mat。Mat最大的优势跟STL很相似,都是对内存进行动态的管理,不需要之前用户手动的管理内存,对于一些大型的开发,有时候投入的lpImage内存管理的时间甚至比关注算法实现的时间还要多,这显然是不合适转载 2013-05-14 16:10:48 · 2154 阅读 · 0 评论 -
OpenCV中特征点提取和匹配的通用方法
OpenCV在新版本中把很多C语言的代码都重新整理成了C++代码,让我们在使用的时候更加方便灵活。其中对于特征点的提取和匹配,充分体现了C++的强大。下面直接用例子来说明。假设我们有两幅图:1.bmp和2.bmp,要从中提取体征点并匹配,代码如下:// Load image from fileIplImage *pLeftImage = cvLoadImage("1.bmp", CV_LOAD转载 2013-05-14 15:01:44 · 2804 阅读 · 0 评论 -
IplImage, CvMat, Mat 的关系和相互转换
原文地址opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化。而CvMat和IplImage类型更侧重于“图像”,opencv对其中的图像操作(缩放、单通道提取、图像阈值操作等)进行了优化。在opencv2.0之前,opencv是完全用C实现的,转载 2013-05-14 10:14:23 · 2456 阅读 · 0 评论 -
OpenCV基础问题汇总
OpenCV读取图像RGB各分量的方法1. 直接定位到imageData,用数组的形式读取 unsigned char b=(unsigned char )m_image.GetImage()->imageData[0]; unsigned char g=(unsigned char )m_image.GetImage()->imageData[1];转载 2013-02-27 17:31:48 · 1920 阅读 · 0 评论 -
OpenCV学习笔记(四十六)——FAST特征点检测features2D
转载自:http://blog.csdn.net/yang_xian521/article/details/7411438特征点检测和匹配是计算机视觉中一个很有用的技术。在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用。这一次先介绍特征点检测的一种方法——FAST(features from accelerated segment test)。很多传统的算法都很耗时,而且特征点检测转载 2013-02-25 19:59:25 · 2322 阅读 · 0 评论 -
在XCode上使用OpenCV
在Xcode上使用OpenCV,有两种方法:1.自己编译源码生成链接库加入到项目中;2.直接使用官方提供的Framework。方便起见呢,我使用的是添加OpenCV Framework,只要经过如下简单几步的配置,便可以进行Opencv开发了。首先从opencv中文网站(http://wiki.opencv.org.cn/index.php/Download)上下载open原创 2013-10-08 20:28:33 · 4612 阅读 · 1 评论 -
OpenCV使用的一些经验总结,寻找最大轮廓、旋转
使用OpenCV也有一段时间了,中间遇到了不少问题。一般都是到网络上找答案或者自己试验,现在把这些经验好好整理下,方便自己查找也方便同行参考。一、轮廓(Contour)1.cvDrawContours()可以填充轮廓内部。 cvDrawContours(gray, contour,cvScalar(255,255,255,0),cvScalar(255,255,255,0),转载 2013-09-24 11:09:26 · 4439 阅读 · 1 评论 -
The Fundamental Matrix Song【经典:国外大牛把它的作用变成一首歌了】
The fundamental matrix Used in stereo geometry A matrix with nine entries It's square with size 3 by 3 Has seven degrees of freedom It has a rank deficiency It's only of rank two Call th转载 2013-12-17 14:26:55 · 2854 阅读 · 0 评论 -
opencv各种内存泄露情况的总结
以下文章共总结出cvLoadImage cvCloneImage cvGetRow 三个函数容易由于使用不当而泄露内存,要注意!OpenCV中的内存泄露问题(cvLoadImage函数)摘自在做项目的过程中,使用OpenCV经常会出现一些内存泄露问题,自己编写的程序出现问题还情有可原,但若是库函数调用和使用时出现,却很令我恼 火。花了好长时间和实践的经验告诉我应转载 2013-05-14 14:36:17 · 5257 阅读 · 0 评论 -
Android+OpenCV 摄像头实时识别模板图像并跟踪
通过电脑摄像头识别事先指定的模板图像,实时跟踪模板图像的移动【用灰色矩形框标识】ps:一开始以为必须使用OpenCV Manager,可是这样会导致还需要用户去额外安装一个apk,造成用户体验很差,后来在网上找到一些牛人说的方法,实现了可以不用安装OpenCV Manager,直接加载其需要的静态库,从而优化了用户体验。效果如图所示:原创 2013-10-12 10:30:22 · 12253 阅读 · 13 评论