重新学习2.0以上OPENCV(基于MAT类型)1

来源:互联网 发布:数据库原理王珊答案 编辑:程序博客网 时间:2024/06/05 04:18

一直没有好好系统的做编程的学习工作,现在才发现,做好笔记是多么重要。。。
参考手册地址: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丶大大的流程走一遍,希望能巩固自己的数字 图像处理的基础。

0 0
原创粉丝点击