当前位置: 首页 > news >正文

机器学习与图像识别(二)—— OpenCV环境折腾。。

文章目录

  • 进入正题之前
  • 版本说明
  • Python环境搭建
    • 安装
    • aruco算法
  • C++ 环境搭建
    • 安装 VS+opencv
    • 验证 Aruco算法,opencv==4.8.0

进入正题之前

OpenCV是一个优秀的开源视觉处理软件框架,也是计算机视觉学习道路上必须掌握的一套工具,奈何其版本兼容性上实在是一言难尽。本文主要就是在说OpenCV搭建开发环境时遇到的各种奇葩问题,方便帮助后面的新同学排雷。如果你也刚好遇到类似的问题并且靠着本文的处理方式解决掉你的麻烦,不妨搜一搜VX公众号“24K纯学渣”,可能会有更多的惊喜噢。本文将持续更新。。。

PS:如果本文找不到你遇到的问题,可以去官方文档搜,传送门:https://docs.opencv.org/

版本说明

opencv 3.4.2.17 是最后一版支持免费使用sift等模板匹配算法的版本,之后的版本由于版权问题去掉了一些可能会被收费的模块。

aruco算法从4.7.0开始进入到opencv-python主库

Python环境搭建

如果只需要主要模块 pip install opencv-python
如果需要更全的模块 pip install opencv-contrib-python
如果资源较少,不需要任何GUI功能 pip install opencv-python-headless
如果资源较少,不需要任何GUI功能,包含contrib模块 pip install opencv-contrib-python-headless
因此一般来说都会选择安装opencv-contrib-python不要同时安装opencv-python和opencv-contrib-python。
关于安装包的问题解决完以后,新版本的安装包在原来的代码上会连续报如下错误,对应新版本修改即可。
————————————————
版权声明:本文为CSDN博主「童鸢」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41837701/article/details/129256430

安装

# for Linux-like OS
pip3 install opencv-python==x.x.x.x# for Windows
pip install opencv-python==x.x.x.x

aruco算法

只安装了opencv-python

import cv2 # opencv-python==4.8.1.78img = cv2.imread("./in_imgs/4x4_15.png", 0)
cv2.imshow("img", img)ad = cv2.aruco.ArucoDetector()
corners, ids, rejected = ad.detectMarkers(img)
cv2.waitKey()
cv2.destroyAllWindows()

只安装 opencv-contrib-python==3.4.2.17,环境是CentOS 7.9 server版本

import cv2 # opencv-python==3.4.2.17img = cv2.imread("./in_imgs/4x4_15.jpg", cv2.IMREAD_COLOR)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# cv2.imshow("img", img) # 由于没有GUI,无法调用imshow函数arucoDict = cv2.aruco.Dictionary_get(cv2.aruco.DICT_4X4_50)
arucoParams = cv2.aruco.DetectorParameters_create()
corners, ids, rejected = cv2.aruco.detectMarkers(img_gray, arucoDict, parameters=arucoParams)print(corners, ids, rejected)img = cv2.aruco.drawDetectedMarkers(img, corners, ids, [0,255,0])
cv2.imwrite("./out_imgs/detected_aruco.jpg", img)

(1)AttributeError: module ‘cv2.aruco’ has no attribute ‘Dictionary_get’
cv2.aruco.Dictionary_get()函数会加载cv2.aruco.DICT_nXn_250包含250个标记的字典,其中每个标记都是n×n位二进制模式。
在最新的版本中,这个函数的API改为了 cv2.aruco.getPredefinedDictionary
(2)AttributeError: module ‘cv2.aruco’ has no attribute ‘DetectorParameters_create’
cv2.aruco.DetectorParameters_create这个函数的作用是使用默认值初始化检测器参数改为了cv2.aruco.DetectorParameters
————————————————
版权声明:本文为CSDN博主「童鸢」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41837701/article/details/129256430

(3)centos7和ubuntu18.04分别解决cv2缺少共享库( libSM.so.6)的解决方法:

yum install libSM-1.2.2-2.el7.x86_64 --setopt=protected_multilib=false 
yum install libXrender-0.9.10-1.el7.x86_64 --setopt=protected_multilib=false
yum install libXext-1.3.3-3.el7.x86_64 --setopt=protected_multilib=false

C++ 环境搭建

安装 VS+opencv

  • 先安装Visual Studio,如果已经安装请跳过!
  • 官网下载opencv-windows.exe
  • 执行open-windows.exe,记住安装的路径
  • 添加opencv的环境变量到Path中:C:\your\local\env\path\for \opencv\build\x64\vc16
  • 将C:\your\local\env\path\for \opencv\build\x64\vc16\bin下的opencv_videoio_ffmpeg480_64.dll、opencv_world480.dll、opencv_world480d.dll 复制到 C:\Windows\System32\下。
  • 新建一个d_opencv_env.props 和 r_opencv_env.props文本文件,分别复制下面的内容到对应的属性表文件中。注意路径!!!

属性表(Debug):
注意: C:\your\local\env\path\for 换成你自己的安装路径。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><ImportGroup Label="PropertySheets" /><PropertyGroup Label="UserMacros" /><PropertyGroup><IncludePath>C:\your\local\env\path\for\opencv\build\include;C:\your\local\env\path\for\opencv\build\include\opencv2;$(IncludePath)</IncludePath><LibraryPath>C:\your\local\env\path\for\opencv\build\x64\vc16\lib;$(LibraryPath)</LibraryPath></PropertyGroup><ItemDefinitionGroup><Link><AdditionalDependencies>C:\your\local\env\path\for\opencv\build\x64\vc16\lib\opencv_world480d.lib;%(AdditionalDependencies)</AdditionalDependencies></Link></ItemDefinitionGroup><ItemGroup />
</Project>

属性表(Release):
注意: C:\your\local\env\path\for 换成你自己的安装路径。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><ImportGroup Label="PropertySheets" /><PropertyGroup Label="UserMacros" /><PropertyGroup><IncludePath>C:\your\local\env\path\for\opencv\build\include;C:\your\local\env\path\for\opencv\build\include\opencv2;$(IncludePath)</IncludePath><LibraryPath>C:\your\local\env\path\for\opencv\build\x64\vc16\lib;$(LibraryPath)</LibraryPath></PropertyGroup><ItemDefinitionGroup><Link><AdditionalDependencies>C:\your\local\env\path\for\opencv\build\x64\vc16\lib\opencv_world480.lib;%(AdditionalDependencies)</AdditionalDependencies></Link></ItemDefinitionGroup><ItemGroup />
</Project>

验证 Aruco算法,opencv==4.8.0

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/objdetect/aruco_detector.hpp>int main(int argc, char const *argv[])
{//std::cout << "先生成一个aruco marker" << std::endl;//std::cout << "保存生成的aruco marker" << std::endl;std::cout << "1. 读取aruco marker" << std::endl;cv::Mat img_color = cv::imread("./in_imgs/4x4_15.jpg", cv::IMREAD_COLOR);//cv::Mat img = cv::imread("./in_imgs/4x4_15.jpg", cv::IMREAD_COLOR);cv::Mat img;cv::cvtColor(img_color, img, cv::COLOR_BGR2GRAY);//宽度std::cout << "宽度: " << img.cols << std::endl;//高度std::cout << "高度: " << img.rows << std::endl;//通道数std::cout << "通道数: " << img.channels() << std::endl;cv::imshow("aruco_15", img);auto dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_4X4_50);std::vector<std::vector<cv::Point2f>>corners, rejectedImgPoints;std::vector<int> ids;auto parameters = cv::aruco::DetectorParameters();//cv::aruco::detectMarkers(img, dictionary, corners, ids, parameters, rejectedImgPoints);cv::aruco::ArucoDetector ad = cv::aruco::ArucoDetector();ad.detectMarkers(img, corners, ids);cv::aruco::drawDetectedMarkers(img_color, corners, ids, cv::Scalar(0, 255, 0));if (ids.size() > 0){std::cout << ids[0] << std::endl;}cv::imshow("drawed", img_color);cv::waitKey();return 0;
}

相关文章:

  • 【Linux】20、进程状态:不可中断进程、iowait、僵尸进程、dstat strace pstree
  • oracle-buffer cache
  • 华为模拟器dhcp实验
  • X3DAudio1_7.dll丢失原因,X3DAudio1_7.dll丢失怎样解决分享
  • 星火模型(Spark)的langchain 实现
  • TDengine 跨版本迁移实战
  • lambda表达式c++
  • php mysql 如何处理查询中存在正则特殊字符的查询
  • 十、Linux运行级别
  • 常见的SQL语句及函数
  • 线程的三种创建方式
  • GitHub如何删除仓库
  • 数据分析—将txt文件转为csv文件;将csv文件转为xls文件
  • 04 后端增删改查【小白入门SpringBoot + Vue3】
  • 《Effective C++》条款23
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • classpath对获取配置文件的影响
  • JavaScript类型识别
  • JDK 6和JDK 7中的substring()方法
  • js 实现textarea输入字数提示
  • Mithril.js 入门介绍
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 工程优化暨babel升级小记
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何优雅地使用 Sublime Text
  • 新手搭建网站的主要流程
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 积累各种好的链接
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​学习一下,什么是预包装食品?​
  • ​用户画像从0到100的构建思路
  • #pragma 指令
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (一)80c52学习之旅-起始篇
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .equals()到底是什么意思?
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET 读取 JSON格式的数据
  • .NET性能优化(文摘)
  • .net中的Queue和Stack
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • .skip() 和 .only() 的使用
  • @Bean, @Component, @Configuration简析
  • [ 数据结构 - C++] AVL树原理及实现
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [C#C++]类CLASS
  • [C++]类和对象【上篇】
  • [C语言]——分支和循环(4)
  • [delphi]保证程序只运行一个实例
  • [Design Pattern] 工厂方法模式
  • [Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包