win10系统下vs2010+opencv2.4.9配置教程并实现打开关闭摄像头,实现纸张识别算法

0.介绍opencv之前先了解下visual studio和opencv之间的版本对应关系

  • VS版本与VC版本对应关系

Visual Studio 6 : vc6

Visual Studio 2003 : vc7

Visual Studio 2005 : vc8

Visual Studio 2008 : vc9

Visual Studio 2010 : vc10

Visual Studio 2012 : vc11

Visual Studio 2013 : vc12

Visual Studio 2015 : vc14

Visual Studio 2017 : vc15

  • opencv 对 VC版本 的支持情况

opencv 2.4.10 == vc10、vc11、vc12

opencv 2.4.13 == vc11、vc12

opencv 3.4.0 == vc14、vc15

opencv 3.4.1 == vc14、vc15

所以大家查看自己的vs版本,选择相应的opencv版本,不要搞错了,如果非要vs2017下配置opencv2.4.10,好像会报缺少mfc动态库的错,所以建议版本匹配。

本篇选择版本的opencv2.4.9+vs2010,都比较老,但这并不影响功能。主要实现摄像头的打开关闭操作,并实现简单的纸张检测算法。主要用于高拍仪文档识别、扫描等场景。

1.环境准备

  • opencv2.4.9下载

可以从官网下载,速度慢;

也可以从百度网盘下载,https://pan.baidu.com/s/1o7WoC7S,下载好之后解压安装,设置d盘根目录。

解压安装好后,目录如下:

图片.png

2.打开vs2010,新建对话框工程OpenCVCam,配置项目属性。

2.1)包含目录

图片.png

2.2)库目录

图片.png

2.3)链接库

图片.png

opencv_ml249d.lib

opencv_calib3d249d.lib

opencv_contrib249d.lib

opencv_core249d.lib

opencv_features2d249d.lib

opencv_flann249d.lib

opencv_gpu249d.lib

opencv_highgui249d.lib

opencv_imgproc249d.lib

opencv_legacy249d.lib

opencv_objdetect249d.lib

opencv_ts249d.lib

opencv_video249d.lib

opencv_nonfree249d.lib

opencv_ocl249d.lib

opencv_photo249d.lib

opencv_stitching249d.lib

opencv_superres249d.lib

opencv_videostab249d.lib

经过这3步,vs2010下opencv249的环境已经配置完毕,下面就可以编写代码。

3.编写CVCamera类,主要包括摄像头打开,关闭,拍照和自动识别纸张的算法,和裁减出纸张的功能。

头文件如下:

//************************************
    // Method:    OpenCamera 打开摄像头
    // FullName:  CVCamera::OpenCamera
    // Access:    public 
    // Returns:   bool
    // Qualifier:
    // Parameter: int indexDevice 摄像头索引
    // Parameter: int width 像素宽
    // Parameter: int height 像素高
    //************************************
    bool        OpenCamera(int indexDevice, int width, int height);

    //************************************
    // Method:    CloseCamera 关闭摄像头
    // FullName:  CVCamera::CloseCamera
    // Access:    public 
    // Returns:   void
    // Qualifier: 
    //************************************
    void        CloseCamera();

    //************************************
    // Method:    Grab 拍照,是否自动识别图片中纸张并裁减
    // FullName:  CVCamera::Grab
    // Access:    public 
    // Returns:   int
    // Qualifier: 
    // Parameter: const char * fileName 文件名,需要后缀
    // Parameter: int angle 旋转角度 0,90,180,270
    // Parameter: bool beCut 是否自动识别图片中纸张并裁减
    // Parameter: POINT & p1 识别到的纸张的像素点p1
    // Parameter: POINT & p2 识别到的纸张的像素点p2
    // Parameter: POINT & p3 识别到的纸张的像素点p3
    // Parameter: POINT & p4 识别到的纸张的像素点p4
    //************************************
    int         Grab(const char* fileName, int angle, bool beCut, POINT& p1, POINT& p2, POINT& p3, POINT& p4);      

    //************************************
    // Method:    GrabFixed 拍照固定裁减
    // FullName:  CVCamera::GrabFixed
    // Access:    public 
    // Returns:   int
    // Qualifier: 
    // Parameter: string dstImageFile
    // Parameter: int angle
    // Parameter: POINT p1
    // Parameter: POINT p2
    // Parameter: POINT p3
    // Parameter: POINT p4
    //************************************
    int         GrabFixed(string dstImageFile, int angle, POINT p1, POINT p2, POINT p3, POINT p4);
    
    //************************************
    // Method:    IsOpen 标识摄像头是否打开
    // FullName:  CVCamera::IsOpen
    // Access:    public 
    // Returns:   bool
    // Qualifier:
    //************************************
    bool        IsOpen();

因为最近手上没有摄像头,所以不能贴出运行效果图,等后期补上。

另打开摄像头目前是通过索引来打开的,后面我会加上通过摄像头名称或者摄像头设备的pid,vid来打开。vid pid

USB(Universal Serial BUS,通用串行总线);

VID(Vender ID供应商识别码)和PID(Product ID产品识别码);

每一个USB设备都有VID和PID;

其中,VID是由供应商向USB-IF(Implementers Forum 应用者论坛)申请。每一个供应商的VID是唯一,PID是由供应商自行决定;

主机通过VID和PID来识别不同的设备,根据他们(以及设备的版本号),可以给设备加载或安装相应的驱动程序。

VID和PID的长度都是两个字节。
 

发布了27 篇原创文章 · 获赞 9 · 访问量 4883

猜你喜欢

转载自blog.csdn.net/weixin_41761608/article/details/105113716