zoukankan      html  css  js  c++  java
  • 小试牛刀——如何使用OPENCV获取图像

    现在正在学习 OPENCV,与大家分享一下使用OPENCV获取图像的心得。

    首先给出源代码:

    #include<highgui.h>
    int main(int argc,char**argv)
    {
     IplImage* img=cvLoadImage("argv[1]");
     cvNamedWindow("Example1");
     cvShowImage("Example1",img);
        cvWaitKey(0);
     cvReleaseImage(&img);
     cvDestroyWindow("Example1");
    }

    下面在一一详细解释:

    IplImage* img=cvLoadImage("argv[1]");

    该行的意思是将图像文件加载至内存(在实际代码中我们应该检查命令行参数argv[1]所指示的文件是否存在,若不存在应向用户发送一条错误信息)。cvLoadImage()函数是一个高层调用接口,它通过文件名确定被加载的格式;并且该函数将自动分配图像数据结构所需的内存。该函数执行完后返回一个指针,此指针指向一块为描叙该图像文件数据结构(IplImage)而分配的内存块。

    cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);

    cvNamedWindow()函数也是一个高层调用接口,该函数又highgui库提供,cvNamedWindow()函数用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中,“Example1”为该窗口的标题,当然也可以使用其他名字,cvNamedWindow()函数的第二个参数定义了窗口的属性,该窗口可被设置为0(默认)或CV_WINDOW_AUTOSIZE,当为0时,窗口的大小不会不会因图像的大小而改变,图像只能在窗口中根据窗口的大小进行拉伸或缩放;而设置为CV_WINDOW_AUTOSIZE时,窗口这会根据图像的实际大小而相应的拉伸或缩放,以容纳图像。

    cvShowImage("Example1",img);

    该行的功能是显示图像,只要该行IplImage* img=cvLoadImage("argv[1]");在argv[1]中找到与img指针相应的图像,就可使用函数cvShowImage()显示图像,该函数第一个参数表示图像应该在标题为“Example1”的窗口显示,第二个参数表示应该显示那个指针指向的图像。

    cvWaitKey(0);

    cvWaitKey()函数的功能是使程序暂停,将该参数设置为0或负数是,程序将一直等待用户触发键操作。但如果将该参数设置为正数时,则程序将暂停一段时间,时间长为该整数的毫秒单位,例如设置为33,则表示等待时间为33毫秒(一秒显示三帧)。

    cvReleaseImage(&img);

    一旦用完加载到内存的图像文件,我们就可以释放为该图像文件所分配的内存,cvReleaseImage()函数执行完后,img指针被置为NULL。

    cvDestroyWindow("Example1");

    最后,可以销毁显示图像的窗口。事实上,当应用程序的窗口被关闭时,该应用程序窗口所占用的一切资源都将会被操作系统释放,所以地与一些简单的程序,不必调用cvReleaseImage()和cvDestroyWindow()这两个函数,但是,养成习惯每次调用函数显示释放资源总是好的。

    小试牛刀:

    #include"highgui.h"
    int main(int argc,char*argv[])
    {
    IplImage* src =cvLoadImage("E:\beijing.jpg");
    cvNamedWindow("win");
    cvShowImage("win",src);
    cvWaitKey(0);
    cvReleaseImage(&src);
    cvDestroyWindow("win");
    return 0;
    }

    该函数的功能是显示一张图片(磁盘上的图片),图片就省略了,网速不给力。

    刚开始学习OPENCV,可能有一些不到之处,望指正。

  • 相关阅读:
    mac单机 k8s minikube ELK yaml 详细配置 踩坑
    springboot es 配置, ElasticsearchRepository接口使用
    Docker 搭建 ELK 日志记录
    空杯心态
    与友人谈
    mac单机, jenkins-master在集群k8s外, k8s内部署动态jenkins-slave, jnlp方式. 踩坑+吐血详细总结
    Anyproxy 代理前端请求并mock返回 二次开发 持续集成
    Oracle 设置TO_DATE('13-OCT-20', 'dd-MON-yy'), 报错 ORA-01843: 无效的月份
    allure-java 二次开发 添加自定义注解, 并修改@step相关aop问题
    Appium添加Listener运行报错
  • 原文地址:https://www.cnblogs.com/MichaelLi1994/p/3519512.html
Copyright © 2011-2022 走看看