《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. Win10安装多个MySQL实例

    Win10安装MySQL-8.0.15 1.下载mysql-8.0.15-winx64.zip安装包,地址如下 https://cdn.mysql.com//Downloads/MySQL-8.0/m ...

  2. Fabric docker-compose volumes配置解析

    chaincode: container_name: chaincode image: hyperledger/fabric-ccenv tty: true environment: - GOPATH ...

  3. 【FFMPEG】Ubuntu上安装FFMPEG

    在之前,我们成功地使用mingw+msys在Windows平台下编译FFmpeg(见 http://www.linuxidc.com/Linux/2014-11/109839.htm),并生成了ffp ...

  4. 最新 携程java校招面经 (含整理过的面试题大全)

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

  5. 【转帖】龙芯3A3000处理器深度评测:和Intel、AMD差距巨大

    龙芯3A3000处理器深度评测:和Intel.AMD差距巨大 https://www.eefocus.com/mcu-dsp/424623/r0 作者非计算机科班毕业 让我汗颜. 我计算机毕业都不知道 ...

  6. 什么是大数据计算服务MaxCompute

    大数据计算服务(MaxCompute,原名ODPS)是一种快速.完全托管的EB级数据仓库解决方案. 当今社会数据收集手段不断丰富,行业数据大量积累,数据规模已增长到了传统软件行业无法承载的海量数据(百 ...

  7. @RequestBody以及@RequestParam的使用过程区别

    查考地址:https://blog.csdn.net/justry_deng/article/details/80972817 待整理中.....

  8. python+selenium+chrome实现自动登录百度

    #python3.4+selenium3.5+chrome版本 63.0.3239.132+chrome驱动chromedriver.exe #实现自动登录百度 from selenium impor ...

  9. 关于vue项目的文件组织

    最近参与了好几个项目,都是以vue-cli脚手架生成的项目,参与完成之后,有点关于项目文件组织的看法,很想聊聊. 关于目录 由vue-cli脚手架生成的项目,都会生成一个基本的目录格式. 类似于这种, ...

  10. 怎样理解"不推荐不使用var的变量声明方式"这句话

    答: 因为不使用var声明的变量不会被预解析, 如下: console.log(a); console.log(b); var a = 1; b = 2;