《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. Cobbler安装报错--dhcpd -t failed Exception occured: <class 'cobbler.cexceptions.CX'>

    最近想玩一下自动化安装,就研究了一下cobbler,测试环境本来是想用CentOS6.X的,但是后来一想,还是想用CentOS7.X.然后就碰到坑了. 在同步cobbler配置的时候,发现了以下错误: ...

  2. 【ML】seq2seq原理

    最近要做分享,重温seq2seq原理,这篇文章讲的挺清楚: https://zhuanlan.zhihu.com/p/40920384 https://www.jianshu.com/p/b2b95f ...

  3. 在线word转html

    http://www.docpe.com/word/word-to-html.aspx

  4. Java连接阿里云HBase示例

    使用前要在阿里云的 HBase控制台中点击"修改网络白名单",然后将你的ip地址(会有提示的)添加到网络白名单中,这样以后才能访问. 所需依赖: <dependencies& ...

  5. 最新 网宿科技java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.网宿科技等10家互联网公司的校招Offer,因为某些自身原因最终选择了网宿科技.6.7月主要是做系统复习.项目复盘.Leet ...

  6. spring中的ApplicationListener监听器

    监听器在使用过程中可以监听到某一事件的发生,进而对事件做出相应的处理. 首先自定义一个监听器myListener实现ApplicationListener接口 @Repository public c ...

  7. codevs 1200:同余方程

    题目描述 Description 求关于 x 同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入描述 Input Description 输入只有一行,包含两个正整数 a, b,用 一个 空 ...

  8. golang的定时器NewTimer、NewTicker使用

    package main import ( "fmt" "sync" "time" ) /** *ticker只要定义完成,从此刻开始计时, ...

  9. Java 之前总结

    写Java程序 1使用记事本,编写代码 2命名为文件里的类名称相一致 “.java” 3编译编译器创建class文件 编译 打开命令行窗口,进入Java文件所在的目录,执行命令:javac Welco ...

  10. GitLab中批量更换路径并保留历史记录

    git-change-path.sh #!/bin/bash cat git-name.txt | while read line do echo $line git clone --mirror g ...