opencv2
jonson_zc
相信厚积薄发!
展开
-
减少颜色数目
预备知识: 如常见的RGB24图像有256×256×256中颜色,通过Reduce Color将每个通道的像素减少8倍至256/8=32种,则图像只有32×32×32种颜色。假设量化减少的倍数是N,则代码实现时就是简单的value/N*N,通常我们会再加上N/2以得到相邻的N的倍数的中间值,最后图像被量化为(256/N)×(256/N)×(256/N)种颜色。 data[i]是整原创 2015-08-12 21:35:43 · 758 阅读 · 2 评论 -
Harris角点检测
一、Harris检测原理 参见另外一篇博,是用matlab实现的客:http://blog.csdn.net/zhangchen1003/article/details/48162687二、opencv代码实现#include<opencv2\core\core.hpp>#include<opencv2\imgproc\imgproc.hpp>#include<opencv2\highgui\原创 2015-09-14 13:21:09 · 368 阅读 · 0 评论 -
改变图像的对比度和亮度
实现对比度和亮度改变的代码#include<opencv2\opencv.hpp>#include<opencv2\core\core.hpp>#include<opencv2\imgproc\imgproc.hpp>using namespace cv;int main(){ double alpha=0.6; int b=10; Mat image=imread("原创 2015-08-23 10:40:23 · 298 阅读 · 0 评论 -
Mat类基础知识
一、MAT 1、OpenCV2中,数据结构Mat是保存图像像素信息的矩阵,它主要包含两部分:矩阵头和一个指向像素数据的矩阵指针。 2、 矩阵头主要包含,矩阵尺寸、存储方法、存储地址和引用次数等,矩阵头的大小是一个常数,不会随着图像的大小而改变,但是保存图像像素数据的矩阵则会随着图像的大小而改变,通常数据量会很大,比矩阵头大几个数量级。这样,在图像复制和传递过程中,主要的开销是由存放图像像素的矩阵原创 2015-08-19 12:53:55 · 505 阅读 · 0 评论 -
canny算子及滑动条的使用
滑动条: createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange = 0, void* userdata = 0); 参数分别对应为:滑动条名称;显示窗口名称;当滑动条移到时,把当前位置的值传出来;滑动条最大值;回调原创 2015-08-18 10:36:35 · 593 阅读 · 0 评论 -
sobel和laplace算子
一、filter2D: 由Filter2D的名字就可以很容易判断出,这个函数是对2D图像做滤波用的函数原型: C++: void filter2D(InputArray src, OutputArraydst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), double delta=0, int borderTy原创 2015-08-17 15:00:54 · 2214 阅读 · 1 评论 -
低通滤波器
下面主要是通过调用opencv中的一些函数,来实现低通滤波:#include<opencv2\imgproc\imgproc.hpp>#include<opencv2\highgui\highgui.hpp>#include<opencv2\core\core.hpp>#include<opencv2\opencv.hpp>using namespace cv;//实现SALT噪声Mat原创 2015-08-17 09:46:31 · 620 阅读 · 0 评论 -
直方图均衡化
我们可以认为一副高质量的图像应该平均使用所有像素强度,直方图均衡化,即使得直方图尽可能的平坦;equalizeHist可以用来得到均衡化后的直方图,该函数返回类型是void;#include <opencv2\core\core.hpp>#include <opencv2\imgproc\imgproc.hpp>#include<opencv2\opencv.hpp>#include<iost原创 2015-08-14 14:24:30 · 262 阅读 · 0 评论 -
利用查找表处理图像
(1)查找表是一个一对多(或者多对一)的函数,定义了如何将像素值转换为新的值,它本质上是一个一维数组,对于常规图像而言有256个条目 (2)Opencv提供了使用查找表直接计算出量化灰度级后图像的函数——LUT (3)下面带码主要求图像的反转,以及将个数低于指定数目(默认为0)的bin舍去,剩下的最小值变为0,最大值变为255,中间的部分线性拉伸(注意写代码师一定要注意自己定义的是什么数据类型)原创 2015-08-14 11:06:45 · 868 阅读 · 0 评论 -
通道的拆分与合并
可以先拆分,在利用表查找改变每个通道的对比度后,再合并#include<opencv2\opencv.hpp>#include<opencv2\imgproc\imgproc.hpp>#include<opencv2\core\core.hpp>#include<vector>using namespace cv;using namespace std;int main(){ M原创 2015-08-14 14:26:41 · 421 阅读 · 0 评论 -
离散傅立叶变换与逆变换
一、怎样为一副图像增加一个通道 Mat A=(Mat_<double>(3,3)<<1,2,3,4,5,6,7,8,9); Mat B=Mat::zeros(A.size(),A.type()); cout<<"the channels numbers of A: "<<A.channels()<<endl; Mat planels[]={A,B}; Mat原创 2015-08-28 09:39:44 · 2956 阅读 · 0 评论 -
使用直方图统计像素
基础知识: (1) calcHist(),第1个参数为原数组区域列表;第二个参数为有计算几个原数组;参数3为需要统计的通道索引数;参数4为操作掩码,第5个参数为存放目标直方图矩阵;参数6为需要计算的直方图的维数;参数7为每一维的bin的个数;参数8为每一维数值的取值范围,参数10为每个bin的大小是否相同的标志,默认为1,即bin的大小都相同;参数11为直方图建立时清除内存痕迹标志,默认为0,即清原创 2015-08-12 21:45:23 · 673 阅读 · 0 评论 -
图像锐化处理
图像锐化原理: 下面我们进行一个简单的滤波操作,滤波算子为[0 –1 0;-1 5 –1;0 –1 0],它可以让图像变得尖锐,而边缘更加突出。核心公式即: sharp(i.j)=5*image(i,j)-image(i-1,j)-image(i+1,j)-image(i,j-1)-image(i,j+1) 版本一:图像遍历使用三个指针,一个指向当前行、一个指向前一行、一个指向后一行,由于每个原创 2015-08-12 21:40:51 · 1321 阅读 · 0 评论 -
操作基本像素
预备知识:(1) opencv2中用于存储图像数据为Mat类型,优点是它是一个类,可以自动分配和释放内存 (2) image.data是指向已经分配的内存块,另外image.ptr(j)可以返回每一行的地址,data是成员变量,而ptr是成员函数,一般使用后者;其中data返回的是一个unsigned char的指针 (3) image.size()返回的是一个结构体,实际上包括width和we原创 2015-08-12 21:25:16 · 279 阅读 · 0 评论 -
基础知识
(1)Mat的常见属性• data uchar型的指针。Mat类分为了两个部分:矩阵头和指向矩阵数据部分的指针,data就是指向矩阵数据的指针。 • dims 矩阵的维度,例如5*6矩阵是二维矩阵,则dims=2,三维矩阵dims=3. • rows 矩阵的行数 • cols 矩阵的列数 • size 矩阵的大小,size(cols,rows),如果矩阵的维数大于转载 2015-08-12 21:37:44 · 349 阅读 · 0 评论 -
Shi-Tomasi角点检测
一、算法基本原理和步骤(1)原理 shi-Tomasi 算法是Harris 算法的改进。Harris 算法最原始的定义是将矩阵 M 的行列式值与 M 的迹相减,再将差值同预先给定的阈值进行比较。后来Shi 和Tomasi 提出改进的方法,若两个特征值中较小的一个大于最小阈值,则会得到强角点。(2)算法步骤 二、代码实现(1)goodFeatureTrack()函数原型:void goodFeat原创 2015-10-13 18:54:25 · 5618 阅读 · 1 评论