首页 > 其他分享 >笔记:OpenCV3和Qt5 计算机视觉应用开发(一)

笔记:OpenCV3和Qt5 计算机视觉应用开发(一)

时间:2024-04-16 18:57:53浏览次数:24  
标签:Qt5 OPENCV 笔记 OpenCV3 set opencv ippicv main ICV

目标:学习《OpenCV3和Qt5 计算机视觉应用开发》,记录总结学习过程。

第一章 OpenCV和Qt简介

开发环境

系统版本:Ubuntu 16.04.7 LTSQt版本:Qt 5.9.5OpenCV版本:opencv-3.3.0虚拟机版本:VMware® Workstation 16 Pro(16.2.2 build-19200509)

学习总结

1,安装Linux开发环境

终端运行:sudo apt-get install build-essential libgl1-mesa-dev提示:E:无法定位软件包 libg11-mesa-dev解决方法:分开安装软件包
sudo apt-get install build-essential
sudo apt-get install libgl1-mesa-dev

2,安装Open CV

CMake 3.1.1:https://cmake.org/download/CMake GUI:https://cmake.org/files/v3.1/Open CV 3.3.0:https://opencv.org/releases/
CMake编译OpenCV库文件,提示错误:IPPICV: Download: ippicv_2017u2_lnx_intel64_20170418.tgz解决方法:1,更改下载地址(实测依然报错)
1,找到/opencv-3.3.0/3rdparty/ippicv/ippicv.cmake
将"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
改为"https://ghproxy.com/https://raw.githubusercontent.com/opencv/opencv_3rdparty/.../ippicv/"

2,重新编译
2,离线下载(实测有效)
1,根据提示,下载目标版本
目标文件路径:https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20170418/ippicv
将文件下载到本地文件夹,我的文件路径:/home/bob/work/res/DownLoader/
注意:根据错误提示,下载对应版本文件,

2,修改opencv的cmake文件
找到/opencv-3.3.0/3rdparty/ippicv/ippicv.cmake,
将"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
改为"file:///home/bob/work/res/DownLoader/";

3,重新编译;
注意事项ippicv.cmake文件中包含ippicv_2017u2_lnx_intel64_20170418.tgz文件的MD5校验值,如果校验值不一致,仍会报错。
function(download_ippicv root_var)
  set(${root_var} "" PARENT_SCOPE)

  # Commit SHA in the opencv_3rdparty repo
  set(IPPICV_COMMIT "a62e20676a60ee0ad6581e217fe7e4bada3b95db")
  # Define actual ICV versions
  if(APPLE)
    set(OPENCV_ICV_PLATFORM "macosx")
    set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_mac")
    if(X86_64)
      set(OPENCV_ICV_NAME "ippicv_2017u2_mac_intel64_20170418.tgz")
      set(OPENCV_ICV_HASH "0c25953c99dbb499ff502485a9356d8d")
    else()
      set(OPENCV_ICV_NAME "ippicv_2017u2_mac_ia32_20170418.tgz")
      set(OPENCV_ICV_HASH "5f225948f3f64067c681293c098d50d8")
    endif()
  elseif((UNIX AND NOT ANDROID) OR (UNIX AND ANDROID_ABI MATCHES "x86"))
    set(OPENCV_ICV_PLATFORM "linux")
    set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_lnx")
    if(X86_64)
      set(OPENCV_ICV_NAME "ippicv_2017u2_lnx_intel64_20170418.tgz") #对于X86_64系统,文件名
      set(OPENCV_ICV_HASH "87cbdeb627415d8e4bc811156289fa3a")		#对于X86_64系统,文件MD5校验值
    else()
      set(OPENCV_ICV_NAME "ippicv_2017u2_lnx_ia32_20170418.tgz")
      set(OPENCV_ICV_HASH "f2cece00d802d4dea86df52ed095257e")
    endif()
  elseif(WIN32 AND NOT ARM)
    set(OPENCV_ICV_PLATFORM "windows")
    set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_win")
    if(X86_64)
      set(OPENCV_ICV_NAME "ippicv_2017u2_win_intel64_20170418.zip")
      set(OPENCV_ICV_HASH "75060a0c662c0800f48995b7e9b085f6")
    else()
      set(OPENCV_ICV_NAME "ippicv_2017u2_win_ia32_20170418.zip")
      set(OPENCV_ICV_HASH "60fcf3ccd9a2ebc9e432ffb5cb91638b")
    endif()
  else()
    return()
  endif()

  set(THE_ROOT "${OpenCV_BINARY_DIR}/3rdparty/ippicv")
  ocv_download(FILENAME ${OPENCV_ICV_NAME}
               HASH ${OPENCV_ICV_HASH}
               URL
                 "${OPENCV_IPPICV_URL}"
                 "$ENV{OPENCV_IPPICV_URL}"
                 "file:///home/bob/work/res/DownLoader/" #修改后的下载地址
               DESTINATION_DIR "${THE_ROOT}"
               ID IPPICV
               STATUS res
               UNPACK RELATIVE_URL)

  if(res)
    set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE)
  endif()
endfunction()

3,测试OpenCV安装

按照书中例程,提示错误:Error while building/deploying project opencv
18:10:55: 为项目opencv执行步骤 ...
18:10:55: 配置没有改变, 跳过 qmake 步骤。
18:10:55: 正在启动 "/usr/bin/make" 

g++ -Wl,-O1 -Wl,-rpath,/opt/fsl-imx-fb/Qt5.9.5/5.9.5/gcc_64/lib -o opencv main.o qrc_res.o   -L/opt/fsl-imx-fb/Qt5.9.5/5.9.5/gcc_64/lib -lQt5Core -lpthread 
main.o:在函数‘cvflann::anyimpl::big_any_policy<cv::String>::move(void* const*, void**)’中:
main.cpp:(.text._ZN7cvflann7anyimpl14big_any_policyIN2cv6StringEE4moveEPKPvPS5_[_ZN7cvflann7anyimpl14big_any_policyIN2cv6StringEE4moveEPKPvPS5_]+0x10):对‘cv::String::deallocate()’未定义的引用
main.cpp:(.text._ZN7cvflann7anyimpl14big_any_policyIN2cv6StringEE4moveEPKPvPS5_[_ZN7cvflann7anyimpl14big_any_policyIN2cv6StringEE4moveEPKPvPS5_]+0x24):对‘cv::String::deallocate()’未定义的引用
main.o:在函数‘cvflann::anyimpl::big_any_policy<cv::String>::static_delete(void**)’中:
main.cpp:(.text._ZN7cvflann7anyimpl14big_any_policyIN2cv6StringEE13static_deleteEPPv[_ZN7cvflann7anyimpl14big_any_policyIN2cv6StringEE13static_deleteEPPv]+0x15):对‘cv::String::deallocate()’未定义的引用
main.o:在函数‘cv::String::String(char const*)’中:
main.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x30):对‘cv::String::allocate(unsigned long)’未定义的引用
Makefile:243: recipe for target 'opencv' failed
main.o:在函数‘cv::Mat::~Mat()’中:
main.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x15):对‘cv::Mat::deallocate()’未定义的引用
main.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x71):对‘cv::fastFree(void*)’未定义的引用
main.o:在函数‘main’中:
main.cpp:(.text.startup+0x243):对‘cv::imread(cv::String const&, int)’未定义的引用
main.cpp:(.text.startup+0x250):对‘cv::String::deallocate()’未定义的引用
main.cpp:(.text.startup+0x287):对‘cv::imshow(cv::String const&, cv::_InputArray const&)’未定义的引用
main.cpp:(.text.startup+0x28f):对‘cv::String::deallocate()’未定义的引用
main.cpp:(.text.startup+0x2d9):对‘cv::String::deallocate()’未定义的引用
main.cpp:(.text.startup+0x301):对‘cv::String::deallocate()’未定义的引用
collect2: error: ld returned 1 exit status
make: *** [opencv] Error 1
18:10:55: 进程"/usr/bin/make"退出,退出代码 2 。
Error while building/deploying project opencv (kit: Desktop Qt 5.9.5 GCC 64bit)
When executing step "Make"
18:10:55: Elapsed time: 00:00.
需要在.pro文件中加上如下代码
CONFIG += link_pkgconfig
PKGCONFIG += opencv
可用工程
https://download.csdn.net/download/VistaTech/88947454
注意将图片的文件路径改为自己图片的路径
Mat image = imread("/home/bob/work/Qt/QtCvTest/00-opencv/test.jpg");

附件列表

     

    标签:Qt5,OPENCV,笔记,OpenCV3,set,opencv,ippicv,main,ICV
    From: https://www.cnblogs.com/pudding-plus/p/18138951

    相关文章

    • 笔记:OpenCV3和Qt5 计算机视觉应用开发(二)
      目标:学习《OpenCV3和Qt5计算机视觉应用开发》,记录总结学习过程。第2章创建第一个Qt+OpenCV项目学习总结1,信号与槽机制。2,Qt对象树机制实现自动内存管理。3,问题:程序异常结束。OpenCVError:Unspecifiederror(couldnotfindawriterforthespecifiedextension)inimwrite......
    • 笔记:J1939协议之DM1
      目标:学习SAE1939-73中的DM1,尤其是多包故障的传输规则一、基本概念SAE1939-73即CAN总线J1939协议的应用层-诊断符号缩写的含义DM1诊断信息1,当前故障码DM2诊断信息2,历史故障码DM3诊断信息3,历史故障码的清除/复位DM4诊断信息4,停帧参量DM5诊断信息5,诊断准备就绪DM6诊断信......
    • 笔记;超声波倒车雷达方案分析(一)
      需求:搜集超声波倒车雷达方案,了解基础知识和开发要点。一、基础概念1.1测量原理超声波发送探头向外发送超声波,超声波在向外扩散过程中遇到障碍物会产生反射波,通过接收探头对反射波进行接收,采集发送和接收到超声波的时间差来计算障碍物的距离。常用探头工作频率有40KHz,48KHz以及58......
    • 后缀数组 学习笔记
      理论知识详见OIWiki。模板后缀排序一切有关后缀数组问题的必备板子。求后缀数组模板题,OIWiki有详解。点击查看代码#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'#definesortstable_sortusingnamespacestd;constintN=1e6+10;template......
    • nova rescue原理笔记
      说明:场景示例,虚机的启动盘的一个文件被误删除了导致无法再次启动了,或者admin的密码忘记了。Rescue功能提供一个解决这类问题的手段。备注:不能rescue一个volume-backedinstance前提默认情况下,实例从提供的救援映像或新的映像启动原始实例映像的副本(如果未提供救援映像)。......
    • FPGA入门笔记013——嵌入式块RAM使用之FIFO
      1、FIFO概述​ FIFO(FirstInFirstOut),即先进先出。FPGA或者ASIC中使用到的FIFO一般指的是对数据的存储具有先进先出特性的一个缓存器,常被用于数据的缓存或者高速异步数据的交互。它与普通存储器的区别是没有外部读写地址线,这样使用起来相对简单,但缺点就是只能顺序写入数据......
    • React 学习笔记:刚开始接触
      目录前言相关链接个人对React和Vue的初步感觉React和Vue官方态度的区别ReactVue新建第一个React项目复制官方的文档代码教程:井字棋游戏React个人使用体验返回html修改样式作用域React的常用组件ReactDeveloperToolsReact开发工具React框架推荐总结前言之前有断断续续学过一段......
    • markdown语法笔记
      markdown语法笔记目录markdown语法笔记一、标题1.Setext风格的标题定义方式2.Atx风格的标题定义方式3.小结二、段落1.正文2.段落3.不分段换行4.缩进、空白行5.小结三、粗体与斜体四、文本高亮五、下划线、分割线与删除线六、列表1.普通列表2.TODO列表七、引用八、行......
    • 初级英语学习笔记01
       1.Thisis 和Isthis 交换使用 当我们指向一些非特定的物体和人时,使用冠词“a”如果是位置,大小,味道,颜色等,我们使用冠词“the”where在哪里who 谁what 什么onthe ISNOT否定NOISNOT isn'tIN ......
    • day11_我的Java学习笔记 (static_静态成员变量+静态成员方法_工具类、代码块_静态代码
      0.面向对象进阶1.static静态关键字1.1static是什么,static修饰成员变量的用法Java成员变量成员方法Python类(对象)属性类(对象)方法static修饰成员变量的应用:在线人数统计1.2static修饰成员变量的内存原理1.3static修饰成员方法的基本......