《OpenCV图像处理编程实例》例程复现

随书代码下载:http://www.broadview.com.cn/28573

总结+遇到的issue解决:

第一章 初识OpenCV

1.VS2015安装OpenCV2.4.11

四步骤:

1)步骤一:下载Windows安装包OpenCV2.4.11并解压,本人为:D:\ProgramFiles\opencv2

2)步骤二:配置OpenCV2.4.11的环境变量,本人为:D:\ProgramFiles\opencv2\opencv\build\x86\vc12\bin

注意:此处实际此处与系统32位还是64位无关,而与在VS2015工程项目中配置的平台相关,所以,本人电脑64位系统,若添加D:\ProgramFiles\opencv2\opencv\build\x86\vc12\bin,在VS2015工程项目中配置的平台中选择x86,而若若添加D:\ProgramFiles\opencv2\opencv\build\x86\vc12\bin 和 D:\ProgramFiles\opencv2\opencv\build\x64\vc12\bin,在VS2015工程项目中配置的平台选择x86和x64均可,但是步骤三配置VS工程目录要对应。

3)步骤三:配置VS工程目录

包括:新建空白项目Win32控制台应用程序,属性页面:配置:选择“Debug”平台选择“Win32”需要配置3处:VC++目录(包含目录、库目录)和链接器——“输入”(附加依赖项)

选择“Release”平台选择“Win32”需要配置3处:同上。

本人配置的为:配置:选择“Debug”平台选择“Win32”需要配置3处:VC++目录(包含目录:D:\ProgramFiles\opencv2\opencv\build\include、D:\ProgramFiles\opencv2\opencv\build\include\opencv、D:\ProgramFiles\opencv2\opencv\build\include\opencv2;库目录:D:\ProgramFiles\opencv2\opencv\build\x86\vc12\lib)和链接器——“输入”(附加依赖项:opencv_calib3d2411d.lib
opencv_contrib2411d.lib
opencv_core2411d.lib
opencv_features2d2411d.lib
opencv_flann2411d.lib
opencv_gpu2411d.lib
opencv_highgui2411d.lib
opencv_imgproc2411d.lib
opencv_legacy2411d.lib
opencv_ml2411d.lib
opencv_nonfree2411d.lib
opencv_objdetect2411d.lib
opencv_ocl2411d.lib
opencv_photo2411d.lib
opencv_stitching2411d.lib
opencv_superres2411d.lib
opencv_ts2411d.lib
opencv_video2411d.lib
opencv_videostab2411d.lib)

配置:选择“Release”平台选择“Win32”需要配置3处:VC++目录(包含目录:D:\ProgramFiles\opencv2\opencv\build\include、D:\ProgramFiles\opencv2\opencv\build\include\opencv、D:\ProgramFiles\opencv2\opencv\build\include\opencv2;库目录:D:\ProgramFiles\opencv2\opencv\build\x86\vc12\lib)和链接器——“输入”(附加依赖项:opencv_calib3d2411.lib
opencv_contrib2411.lib
opencv_core2411.lib
opencv_features2d2411.lib
opencv_flann2411.lib
opencv_gpu2411.lib
opencv_highgui2411.lib
opencv_imgproc2411.lib
opencv_legacy2411.lib
opencv_ml2411.lib
opencv_nonfree2411.lib
opencv_objdetect2411.lib
opencv_ocl2411.lib
opencv_photo2411.lib
opencv_stitching2411.lib
opencv_superres2411.lib
opencv_ts2411.lib
opencv_video2411.lib
opencv_videostab2411.lib)

注意:(1)以本人配置的位列,若要配置64位系统的库目录应为:D:\ProgramFiles\opencv2\opencv\build\x64\vc12\lib

   (2)若库目录配置为staticlib,这样开发出来的软件将包含opencv库,可以运行于没有安装配置OpenCV开发环境的系统中。如若配置,库目录应为:D:\ProgramFiles\opencv2\opencv\build\x64\vc12\staticlib

4)步骤四:测试OpenCV开发环境是否正确配置。

注意:此处的图像地址一定要正确,本人的是:D:\\Working\\opencvimg\\images\\flower.jpg

2.Sublime下配置OpenCV

1)Sublime下载及汉化:http://www.onlinedown.net/soft/68602.htm

详细配置建议参考Lucida的博文:http://zh.lucida.me/blog/sublime-text-complete-guide/

安装后要配置环境变量,本人的为:C:\Program Files (x86)\Sublime Text 3

2)下载安装MinGW

下载:https://sourceforge.net/projects/mingw/

本人网络特慢,所以给出其他下载链接:https://jingyan.baidu.com/article/0320e2c11564ca1b87507b8f.html

安装后要配置环境变量,本人的为:D:\ProgramFiles\MinGW-V5.1.6\MinGW\bin

测试:测试是否安装及配置成功,windows + r 组合键调出命令提示符,然后输入cmd,然后输入gcc -v,没有报错的话,说明安装配置成功。

3)下载安装OpenCV,制作MinGW版本库。

Sublime下需要利用MinGW进行编译链接OpenCV2.4.x,因此需要配置响应的环境变量,而2.4.4配置为D:\ProgramFiles\opencv2。4.4\opencv\build\x86\mingw\bin,但是2.4.11没有此文件夹

说明:opencv2.4.4官网的后续OpenCV2.4.x软件开发包没有提供相关的MinGW版本库,若使用新版本,需要通过CMake来自己制作。

具体方法为:Windows平台安装最新OpenCV-2.4.9,利用Eclipse、MinGW构建C++调用OpenCV开发环境——https://blog.csdn.net/yanzi1225627/article/details/26408579

还要参看本人另一篇博客:OpenCV+Qt+CMake安装+十种踩坑

这篇博客是QT的MinGW编译OpenCV,里边附带CMake的下载,安装及编译过程。

CMake来自己制作MinGW库要到的issue汇总(1)OpenCV 2.4.11 Compile Issues in “operations.hpp”4101

error: got 2 template parameters but 1 required

解决:打开operations.hpp将4098-4105此函数注释

参考:https://stackoverflow.com/questions/11777958/opencv-2-4-2-compile-issues-in-operations-hpp

https://blog.csdn.net/jacke121/article/details/56038046

(2)D:\ProgramFiles\opencv2\opencv\sources\modules\highgui\src\window_w32.cpp:1853: error: `BTNS_AUTOSIZE' was not declared in this scope
D:\ProgramFiles\opencv2\opencv\sources\modules\highgui\src\window_w32.cpp:1853: error: `BTNS_BUTTON' was not declared in this scope

解决:打开window_w32.cpp在1850-1851行加入:

const int BTNS_AUTOSIZE = 0;
            const int BTNS_BUTTON = 0;

(3)出现[100%] Built target opencv_annotation 表明编译好了

安装后要配置环境变量,本人的为:D:\ProgramFiles\opencv2\opencv\build\x86\mingw\bin

4)新建编译系统OpenCV

打开Sublime界面,选择工具——>编译系统——>新编译系统——>新建my_opencv.sublime-build文件,输入代码:

{
  "cmd": ["g++", "${file}", "-o",
   "${file_path}/${file_base_name}","-I",
   "D:/ProgramFiles/opencv2/opencv/build/include",
  "-I","D:/ProgramFiles/opencv2/opencv/build/include/opencv","-I",
  "D:/ProgramFiles/opencv2/opencv/build/include/opencv2","-L",
   "D:/ProgramFiles/opencv2/opencv/build/x86/mingw/lib",

"-l", "opencv_core2411", "-l", "opencv_imgproc2411",
   "-l", "opencv_calib3d2411","-l", "opencv_video2411",
   "-l", "opencv_features2d2411", "-l", "opencv_ml2411", "-l",
   "opencv_highgui2411","-l", "opencv_objdetect2411", "-l",
   "opencv_legacy2411",  "-l", "opencv_flann2411"],

"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
  "working_dir": "${file_path}",
  "selector": "source.c, source.c++, source.cpp",
  "encoding": "gbk",
  "variants":
  [
    {
      "name": "Run",
      "cmd" : ["${file_path}/${file_base_name}"]
    }
  ]
}
注意:上述代码的3到6行需要更改为自己的实际路径。8到11行为编译连接需要用到的dll,在Opencv\build\x64\mingw\bin目录下可以看到这些dll,将它们按照文件夹中的实际名称更改到代码中,名称中的数字是对应的版本号,名称前缀可以用opencv,也可以用libopencv,注意不要遗漏,否则无法通过编译。完成之后,在工具-编译系统中选择刚才新建的my_opencv,之后就可以编译运行了。

详细参看:将Sublime Text 3打造成OpenCV3.2的IDE

如何编译运行:使用的时候,在选中了一个*.cpp文件,在键盘上输入**ctrl+b**(如果是第一次的话,会弹出下面的框,让你来选;否则就会需要输入ctrl+shift+b 这里关于输入法的必须选英文,否则会有表情包出来的。。)

本人操作:工具——>用什么编译(ctrl+shift+b)

第一个 my_opencv : 这个会编译当前文件。
第二个 my_opencv-Run就是只运行编译后的文件,如果不编译,无法运行。

详细参看:https://blog.csdn.net/a19990412/article/details/82658981

问题:代码1-7运行总是报错 *.exe无法工作。

说明:Sublime测试代码1-3没有问题,把1-7逐行注释测试,发现运行到cv::warpAffine(srcImage, rotateImg, rotateImage,srcImage.size());无法运行,可知其无法运行经过复杂运算的图像,可能是太小的缘故。

第二章 图像及视频基本操作

1.Mat基本操作

1)convertTo函数?

在使用Opencv中,常常会出现读取一个图片内容后要把图片内容的像素信息转为浮点并把当前的mat作为矩形进行矩阵计算,那么这里就有一个类型转换问你,在新的opencv中mat有一个函数可以用于类型的相互转换

ocIMat:convertTo(oclMat& m,int rtype,double alpha=1,double beta=0)

m:转为目标数据类型的矩阵;
rtype:指定目标数据类型,或者是depth(通道数),如果rtype:是负值,那么目标矩阵的数据类型和源矩形的数据类型是一致的;
alpha:基于尺度的变化值;
beta:在尺度上的加和;

举例:
cv:Mat matTemp=cv:Mat:zeros(100,100,CV_32F);//得到一个浮点型的100*100的矩阵
cv:Mat MatTemp2;
matTemp.convertTo(MatTemp2,CV8U);//把矩阵matTemp转为unsing char类型的矩阵,注意在转换过程中有可能数值上会出现一些变化,这个要注意

参看链接:http://www.360doc.com/content/16/1202/09/35269117_611224795.shtml

2)blur函数?什么是锚点?

锚点(即被平滑的那个点)

参看:openCV blur函数

opencv之blur()函数

3)

2

《OpenCV图像处理编程实例》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. nginx和php-fpm 是使用 tcp socket 还是 unix socket ?

    转自 http://blog.csdn.net/qq624202120/article/details/60957634 从上面的图片可以看,unix socket减少了不必要的tcp开销,而tcp需 ...

  2. 提示/bin/roslyn/csc.exe权限不足

    给/bin/roslyn/csc.exe 读取/执行 权限

  3. SIFT学习笔记之一 下载和调用

     下面给出了多个参考地址,挑个能用的吧: vs2010+Rob Hess SIFT: http://blog.csdn.net/lanbing510/article/details/8507341 R ...

  4. NDK学习笔记-JNI多线程

    前面讲到记录到ffmpeg音视频解码的时候,采用的是在主线程中进行操作,这样是不行的,在学习了POSIX多线程操作以后,就可以实现其在子线程中解码了,也可以实现音视频同步了 简单示例 在native实 ...

  5. 使用C++11原子量实现自旋锁

    一.自旋锁 自旋锁是一种基础的同步原语,用于保障对共享数据的互斥访问.与互斥锁的相比,在获取锁失败的时候不会使得线程阻塞而是一直自旋尝试获取锁.当线程等待自旋锁的时候,CPU不能做其他事情,而是一直处 ...

  6. eNSP——交换机基础配置

    原理: 交换机之间通过以太网电接口对接时需要协商一-些接口参数, 比如速率.双工模式等.交换机的全双工是指交换机在发送数据的同时也能够接收数据,两者同时进行.就如平时打电话一样,说话的同时也能够听到对 ...

  7. qt坐标系统见解

    窗口坐标为逻辑坐标,是基于视口坐标系的. 视口坐标为物理坐标,是基于绘图设备坐标系的 窗口坐标始终以视口坐标为最终目标进行映射: QPainter::setWindow 修改了窗口位置和大小(左上角重 ...

  8. Django模板渲染之自定义inclusion_tag详细使用

    inclusion_tag在使用的时候可以帮我们减少很多前端和后端重复的代码 逻辑图: inclusion_tag的作用是主页面以一定的语法给一个参数,调用某个函数,这个函数可以通过主页面给的参数做一 ...

  9. HTML5 & CSS初学者教程(详细、通俗易懂)

    前端语言基础:HTML5 & CSS (一) HTML5:超文本标记语言 (1) 基本概念 是由一系列成对出现的元素标签(标记)嵌套组合而成 ( XML也是标签构成的 ) 这些标签以的形式出现 ...

  10. MVCC原理 4步 什么是MVCC、事务ACID、事物隔离级别、Innodb存储引擎是如何实现MVCC的

    MVCC是来处理并发的问题,提高并发的访问效率,读不阻塞写.事物A 原子性C 一致性I 隔离性D 持久性高并发的场景下的问题脏读不可重复读幻读事物隔离级别RU读未提交 脏读/不可重复读/幻读 .不适用 ...