您的位置:首页 > 运维架构

[学习opencv]图像读取写入,加减乘除

2013-04-18 23:18 330 查看
opencv这个图像库两年前就会用了,本科毕业设计就是用的他,不过其中有很多函数直到现在我也没怎么用过。

关于这个库的学习,我自己的目标是只需要学会怎样调用库函数完成目标就可以了,至于原理性的东西我就不去深究了,原理的东西我会在matlab中实现的。

平台是ubuntu+opencv2,具体版本我忘了。不过2之后的应该都可以。

第一个先练手的程序,我尽量用C++版的:

#include "cv.h"
#include "highgui.h"
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
Mat img1 = imread("maki.jpg");
Mat img2 = imread("misaka.jpg");

int height=img1.rows;                //行数
int width=img1.cols;                   //列数
int dims=img1.dims;                    //维数
cout<<height<<"  "<<width<<"  "<<dims<<endl;

Mat tmp(height,width,CV_8UC3,Scalar(2,2,2));  //产生一个[height width 3]所有元素全为2的矩阵
Mat re;
//运算符重载真是让人喜欢
re=img1+Scalar(100,100,100);                    //图像相加
imshow("image1", re);

re=img1-img2;                      //图像相减
imshow("image2",re);

re=img1*2;                      //图像和一个数相乘
imshow("image3",re);

re=img1/2;                    //图像和一个数相除
imshow("image4",re);

re=img1.mul(tmp);            //img1和tmp每个元素相乘
imshow("image5",re);
Vec3i s=re.at<Vec3b>(1,1);   //数据访问
cout<<s.val[0]<<"  "<<s.val[1]<<"  "<<s.val[2]<<endl;

imwrite("re.jpg",re);
waitKey();

return 0;
}


vim需要重新设置以方便编译,.exrc文件加入如下代码:

" C++的编译和运行
map <F6> :call CompileRunGpp()<CR>
func! CompileRunGpp()
exec "w"
exec "!g++ `pkg-config opencv --libs --cflags opencv` % -g -o %<"
exec "! ./%<"
endfunc


以后写完直接按F6就可以编译运行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: