(清明节放假三天,外出旅游,未更新)
1、访问图像中的像素
1>颜色空间缩减(color space reduction) ——遍历图像每个像素;对像素进行 I1= (I0/10)*10;
2>LUT函数:Look up table操作
OpenCV官网推荐:operationsOnArray:LUT()
3>计时函数
double time0 = static_cast
time0 = ((double)getTickCount() - time0) / getTickFrequency(); //运行后时间
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>访问像素的三个方法
(1)指针; uchar * data = outputImage.ptr
(2)迭代器iterator; Mat_
Mat_
(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
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_
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()