【OpenCV】OpenCV3的第四天——core组件进阶

(清明节放假三天,外出旅游,未更新)


1、访问图像中的像素


1>颜色空间缩减(color space reduction)   ——遍历图像每个像素;对像素进行  I1= (I0/10)*10;


2>LUT函数:Look up table操作

OpenCV官网推荐:operationsOnArray:LUT()   : 用于批量进行图像元素查找、扫描、与操作;

3>计时函数

double time0 = static_cast(getTickCount());    //起始时间

                time0 = ((double)getTickCount() - time0) / getTickFrequency();    //运行后时间

 [代码]opencv计算耗时代码的时间     


1
2
3
4
5
6
double t = ( double )cvGetTickCount();
 
//do the hard work job
 
t = ( double )cvGetTickCount() - t;
std::cout << "耗时:(毫秒): " << t / (( double )cvGetTickFrequency()*1000.) << endl;


4>访问像素的三个方法

 

【OpenCV】访问Mat中每个像素的值(新)


(1)指针;  uchar * data = outputImage.ptr(i);   //第i行的首地址


(2)迭代器iterator; Mat_::iterator it = outputImage.begin();

Mat_::iterator itend = outputImage.end();

(3)动态地址计算;


2、感兴趣区域(ROI——region of interest)

Mat imageROI;

imageROI = image(Rect(500,250, logo.cols, logo.rows));


imageROI = image(Range(250, 250+logo.rows), Range(200, 200 + logo.cols));


3、图像混合

线性混合:g(x) = (1-a)f1(x) + af2(x);

函数addWeighted()——两个图像的加权和;

初级图像混合:ROI + addWeighted()


4、分离颜色通道

通道分离:split();

vector channels;

Mat matBlue, matGreen, matRed;

srcImage = imread("1.jpg");

split(srcImage, channels);

matBlue = channels.at(0);

matGreen = channels.at(1);

matRed = channels.at(2);


通道合并:merge();

merge(channels, mergeImage);


5、多通道图像混合

addWeighted()  + split()  + merge()


6、调整图像的对比度、亮度

点操作;

亮度调整、对比度调整、颜色校正、变换;


7、对图像进行离散傅里叶变换(DFT——Discrete Fourier Transform)

对图像进行傅里叶变换就是将它分解成正弦和余弦两个部分;也就是将图像从空间域(spatial domain) 转换到 频域(frequency domain);


显示傅里叶变换后的图像:实数图像 + 虚数图像                 或者              幅度图像  + 相位图像


函数:dft()——src,dst,flags

flags:

DFT_INVERSE   —— 逆变换代替正向变换

DFT_SCALE   —— 缩放比例;与DFT_INVERSE 一起使用

DFT_ROWS   —— 正向或反向变换;

DFT_COMPLEX_OUTPUT——正变换

DFT_REAL_OUTPUT  —— 反变换




返回DFT最优尺寸大小:getOptimalDFTSize()


扩充图像边界:copyMakeBorder()


计算二维矢量的幅值:magnitude()


计算自然对数:log()


矩阵归一化:normalize()



8、输入输出XML文件、YAML文件


XML文件:可扩展标识语言;它描述了文档的结构和语义;

YAML文件:以数据为中心;用来表达资料序列的格式;

后缀:.yml  和  .yaml



(1)文件打开:

FileStorage构造函数;

FileStorage fs;

fs.open("abc.xml", FileStorage::WRITE);

//或者

FileStorage fs("abc.xml", FileStorage::WRITE);


(2)文件读写

向Mat中写入:

Mat R = Mat_::eye(3,3);

fs << "R" << R;


从Mat中读取

fs ["R"]  >> R;


(3) vector(arrays) 和 maps的输入和输出

对于 vector:  加[   ] 

fs << "strings" << "[";

fs << "image1.jpg"  << "Awesomeness"  << "baboon.jpg";

fs << "]" ;


对于map:加{    }

fs   << "Mapping";

fs  << "{" << "One"  << 1;

fs  << "Two" << 2 << "}";


(4)文件关闭

fs.release()

你可能感兴趣的:(OpenCV)