一直没有好好系统的做编程的学习工作,现在才发现,做好笔记是多么重要。。。
参考手册地址:http://docs.opencv.org/2.4.13.2/(中文的虽然看起来简单,但存在很多问题。。。)
参考的博主:☆Ronny丶(http://www.cnblogs.com/ronny/p/opencv_road_1.html)
首先是预编译的部分:
#include "stdafx.h"
#include<opencv2\opencv.hpp>
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<iostream>
using namespace cv;
using namespace std;
1.opencv.hpp包含大部分opencv2.0以上的图像处理函数,函数实现功能可以查看手册,core.hpp于opencv的一些基础数据结构相关,highgui.hpp和opencv的一些界面相关,如显示图像的窗口。
2.Mat是OpenCV里最基本的一个类,它用来表示图像。
3.用到了命名空间cv和std,这样接下来的编程中就不必加cv::和std::
补充:NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,不同的人的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数,使用起来就有问题。为解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。
int _tmain(int argc, _TCHAR* argv[])
{
Mat Image;//image(240,320,CV_8U,Scalar(100));声明后图像的大上为0*0的,当然我们也可以初始化一个固定大小的图像,CV_8U,8位单通道无符号整型,100填充所有像素点。
Mat newImage;//经过处理的图像放newImage中。
Image=imread("example.png");
namedWindow("initaldata");
namedWindow("processeddata");
cvtColor(image,result,CV_BGR2GRAY);
imshow("initaldata",Image);
imshow("processeddata",newImage);
waitKey(0);
return 0;
}
1.想让上面程序正确显示出你的图像,请把图像放在正确的路径,或者直接写绝对路径。
2.上面程序中已经用到了图像的读入函数imread、图像的显示函数imshow,那么图像的写入函数imwrite就不会显示陌生了。
imwrite(“output.jpg”,image);
它的第一个参数是写图像的路径,第二个参数是要写入的图像。
3.cvtColor(image,result,CV_BGR2GRAY)。OpenCV API Reference的描述:
C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )
Parameters:
src:input image: 8-bit unsigned, 16-bit unsigned ( CV_16UC… ), or single-precision floating-point.
dst:output image of the same size and depth as src.
code:color space conversion code (see the description below).
dstCn:number of channels in the destination image; if the parameter is 0, the number of the channels is derived automatically from src and code .
赋值与复制:
如果我们想得到一个图像的副本并进行了下面的操作:
Mat newImage=Image;
如果我们对newImage进行修改或操作,则会直接影响Image图像,因为newImage与Image共用了数据内容。
想要真正得到一个副本可以这样做:
Mat newImage;
Image.copyTo(newImage);//方法一
Mat newImage=image.clone();//方法二
很多时候,我们并不想得到原图像的复制,但是要创建一个跟原图像大小相同的图像。下面的代码可以完成这样的功能。
Mat newImage;
newImage.create(Image.size(),Image.type());
也算是照着☆Ronny丶大大的流程走一遍,希望能巩固自己的数字 图像处理的基础。