zoukankan      html  css  js  c++  java
  • OpenCV成长之路 01、图像的读写与显示

    一、工具篇

    工欲善其事,必先利其器。学习OpenCV,肯定少不于基本的编程工具与OpenCV库。在Windows平台下你可以选择Visual Studio、CodeBlock等,当然你也可以选择在Linux平台,用VI、codeBlock都是可以的。编程平台的选择看个人爱好以及项目的开发环境。然后是OpenCV库,你可以在这里下载到最新的版本:http://opencv.org/,最近的版本已经到了2.4.7,但是OpenCV2.0以上版本差别都不算太大。关于怎么安装OpenCV,本文就不再详说了,此类教程实在太多,百度一下类似:VS2012+openCV2.4.6应该能找到你想要的结果。

    二、第一个OpenCV程序

    相比于“第一个C语言程序”或者“第一个Java程序”都以Hello,World!这种俗套的例程,我们的第一个OpenCV来显示一幅自己喜欢的图像。

     1 #include<opencv2/core/core.hpp>
     2 #include<opencv2/highgui/highgui.hpp>
     3 
     4 int main()
     5 {
     6     cv::Mat image;
     7     image=cv::imread("../cat.png");
     8     cv::namedWindow("cat");
     9     cv::imshow("cat",image);
    10     cv::waitKey(5000);
    11     return 0;
    12 }

    关于上面的程序有以下几点要说明:

    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的,当然我们也可以初始化一个固定大小的图像。

    cv::Mat image(240,320,CV_8U,cv::Scalar(100));

    上面的代码创建了一个灰度图像,大小是320*240,图像上每个点的数据类型是无符号8位的,并用100填充所有像素点。
    你可以把CV_8U换成CV_8U3来创建一个三通道的彩色图像。或者用CV_16U创建无符号16位的。

    四、赋值与复制

    如果我们想得到一个图像的副本并进行了下面的操作。

    Mat newImage=Image;

    如果我们对newImage进行修改或操作,则会直接影响Image图像,因为newImage与Image共用了数据内容。

    想要真正得到一个副本可以这样做:

    1 Mat newImage;
    2 Image.copyTo(newImage);//方法一
    3 Mat newImage=image.clone();//方法二

    很多时候,我们并不想得到原图像的复制,但是要创建一个跟原图像大小相同的图像。下面的代码可以完成这样的功能。

    1 Mat newImage;
    2 newImage.create(Image.size(),Image.type());
  • 相关阅读:
    Kubernetes 用户流量接入方案
    给Nginx配置日志格式和调整日期格式
    唇亡齿寒,运维与安全
    Nginx记录用户请求Header到access log
    Kubernetes中利用Kubectl set 让Deployment更新镜像
    故障管理:故障定级和定责
    使用 Elastic 技术栈构建 Kubernetes全栈监控
    故障管理:鼓励做事,而不是处罚错误
    故障管理:谈谈我对故障的理解
    稳定性实践:开关和预案
  • 原文地址:https://www.cnblogs.com/ronny/p/opencv_road_1.html
Copyright © 2011-2022 走看看