工欲善其事,必先利其器。学习 OpenCV,肯定少不于基本的编程工具与 OpenCV 库。在 Windows 平台下你可以选择 Visual Studio、CodeBlock 等,当然你也可以选择在 Linux 平台,用 VI、codeBlock 都是可以的。编程平台的选择看个人爱好以及项目的开发环境。然后是 OpenCV 库,你可以在这里下载到最新的版本:http://opencv.org/,最近的版本已经到了 2.4.7,但是 OpenCV2.0 以上版本差别都不算太大。关于怎么安装 OpenCV,本文就不再详说了,此类教程实在太多,百度一下类似:VS2012+openCV2.4.6 应该能找到你想要的结果。
相比于 "第一个 C 语言程序" 或者 "第一个 Java 程序" 都以 Hello,World! 这种俗套的例程,我们的第一个 OpenCV 来显示一幅自己喜欢的图像。
关于上面的程序有以下几点要说明:
- #include < opencv2 / core / core.hpp > #include < opencv2 / highgui / highgui.hpp > int main() {
- cv: :Mat image;
- image = cv: :imread("../cat.png");
- cv: :namedWindow("cat");
- cv: :imshow("cat", image);
- cv: :waitKey(5000);
- return 0;
- }
1,core.hpp 于 OpenCV 的一些基础数据结构相关,highgui.hpp 和 openCV 的一些界面相关,如显示图像的窗口。
2,Mat 是 OpenCV 里最基本的一个类,它用来表示图像。
3,imshow 是用来显示图像的函数,它的 C++ 接口是:
第一参数是窗口名,第二个参数是要显示的图像。
- void imshow(const string & winname, InputArray mat);
4,与 OpenCV 相关于类或者函数都在 CV 命名空间里。
5,想让上面程序正确显示出你的图像,请把图像放在正确的路径,或者直接写绝对路径。
上面程序中已经用到了图像的读入函数 imread、图像的显示函数 imshow,那么图像的写入函数 imwrite 就不会显示陌生了。
它的第一个参数是写图像的路径,第二个参数是要写入的图像。
- imwrite("output.jpg", image);
在我们的第一个 OpenCV 程序中,用 Mat 来声明了一个图像,声明后图像的大上为 0*0 的,当然我们也可以初始化一个固定大小的图像。
上面的代码创建了一个灰度图像,大小是 320*240,图像上每个点的数据类型是无符号 8 位的,并用 100 填充所有像素点。
- cv: :Mat image(240, 320, CV_8U, cv: :Scalar(100));
如果我们想得到一个图像的副本并进行了下面的操作。
如果我们对 newImage 进行修改或操作,则会直接影响 Image 图像,因为 newImage 与 Image 共用了数据内容。
- Mat newImage = Image;
想要真正得到一个副本可以这样做:
很多时候,我们并不想得到原图像的复制,但是要创建一个跟原图像大小相同的图像。下面的代码可以完成这样的功能。
- Mat newImage;
- Image.copyTo(newImage); //方法一Mat newImage=image.clone();//方法二
- Mat newImage;
- newImage.create(Image.size(), Image.type());
来源: http://lib.csdn.net/article/opencv/37846