机器学习与图像识别(二)—— 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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/150100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka、RocketMQ、RabbitMQ的比较总结Kafka、RocketMQ、RabbitMQ的比较总结

【精选】Kafka、RocketMQ、RabbitMQ的比较总结_kafka rabbitmq rocketmq_【江湖】三津的博客-CSDN博客

关于缓存和数据库一致性问题的深入研究

如何保证缓存和数据库一致性&#xff0c;这是一个老生常谈的话题了。 但很多人对这个问题&#xff0c;依旧有很多疑惑&#xff1a; 到底是更新缓存还是删缓存&#xff1f;到底选择先更新数据库&#xff0c;再删除缓存&#xff0c;还是先删除缓存&#xff0c;再更新数据库&…

JAVA必应回答。

怎么知道IO流是否及时关闭&#xff1f; IO流是Java中用于处理输入和输出的一种抽象概念&#xff0c;它可以是文件、网络、内存等不同的数据源或目的地。IO流在使用完毕后&#xff0c;需要及时关闭&#xff0c;以释放系统资源&#xff0c;避免造成内存泄漏或文件占用等问题。12…

mysqlbinlog使用记录

首先要确认mysql启用了binlog功能。一般默认启用。 mysql> select log_bin; ----------- | log_bin | ----------- | 1 | ----------- 然后确认binlog目录 mysql> select log_bin_basename; ---------------------------- | log_bin_basename | -----…

安装Nginx时报:./configure: error: can not define uint32_t

安装版本&#xff1a;v.1.25.3 安装命令&#xff1a; ./configure --prefix/opt/nginx/1.25.3 && make && make install 执行命令后出现异常&#xff0c;如图&#xff1a; 解决方法&#xff1a; yum install -y kernel-headers kernel-devel gcc make

大模型真的会让软件测试人员下岗吗?

在今年3月写过一篇文章&#xff1a;又一次被震惊&#xff1a;从生成和细化需求到应用各种方法设计测试用例 &#xff0c;展示了chatGPT生成测试用例&#xff0c;而且可以用不同的方法生成测试用例&#xff0c;在我们的引导下它还能补充测试用例、完善测试用例。半年之后&#x…

北邮22级信通院数电:Verilog-FPGA(10)第十周实验 实现移位寄存器74LS595

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 二.管脚分配 三.实现过程讲解及效…

关于爬虫中的hook(defineProperty,hook cookies, hook载荷数据,hookXHR)

关于爬虫中的hook&#xff1a; defineProperty var people {age: 19, }; var count20; console.log(people.age) // 参数&#xff1a;对象 属性名字 函数 Object.defineProperty(people, age, {get: function () {console.log(获取值&#xff01;);return count;},// set: …

域名服务器有哪些类型

域名服务器有哪些类型 随着现在网络的不断发展&#xff0c;越来越多的企业开始使用网络建站&#xff0c;以此来进行营销和推广&#xff0c;而网站在建设过程中需要使用域名和空间&#xff0c;那么域名服务器是什么&#xff1f;下面由给大家说一下。 主域名服务器 负责维护一…

SOME/IP 协议介绍(五)指南

指南&#xff08;信息性&#xff09; 选择传输协议 SOME/IP直接支持互联网上使用最广泛的两种传输协议&#xff1a;用户数据报协议&#xff08;UDP&#xff09;和传输控制协议&#xff08;TCP&#xff09;。UDP是一种非常简洁的传输协议&#xff0c;仅支持最重要的功能&#…

单页应用(SPA)和多页应用(MPA)的区别和优缺点?

单页应用&#xff08;Single-Page Application&#xff0c;SPA&#xff09;和多页应用&#xff08;Multi-Page Application&#xff0c;MPA&#xff09;是两种常见的Web应用程序开发模式&#xff0c;它们有一些区别和各自的优缺点。 单页应用&#xff08;SPA&#xff09;&…

在电脑PC端可以分类记笔记的软件选择哪个?

选择用电脑来记录笔记是比较便捷的&#xff0c;电脑屏幕比较大&#xff0c;操作起来比较便捷。但是很多人用电脑来记录笔记&#xff0c;通常会使用电脑上自带的记事本、文档记事工具来整合笔记&#xff0c;打开文档记事本类的软件&#xff0c;密密麻麻的文字呈现出来。 选择用…

Cesium点位弹窗

1.弹窗没法向加入点位一样加入到地图内部&#xff0c;entity没法实现 2.使用绝对定位&#xff0c;将地图组件通过定位加入到地图上&#xff0c;注意弹窗层级一定在地图上 3.通过判断点击位置是否是点位来获取entity信息&#xff0c;将信息显示在弹窗 4.将点击处点位的经纬度转为…

前端常用utils方法持续更新中

1.数字太长截断显示 在data上方定义一个filter 在template中{{value | ellipsis}} filters: {ellipsis(value) {if (!value) return if (value.length > 8) {return value.slice(0, 8) ...}return value}},2.根据数据值动态更改表格样式 :cell-style“changeCellStyle” …

RHCSA --- Linux存储管理

存储管理 Boot&#xff1a;可引导操作系统的分区&#xff08;必须是主分区&#xff09; 分区 ll /dev/nvme0n* 表示的是 nvme接口的磁盘 0n1 1 0n2 2 0n3 3 brw-rw----. 1 root disk 259, 0 Nov 15 19:31 /dev/nvme0n1 磁盘1 brw-rw----. 1 ro…

【Linux】Makefile

一、gcc 的缺点 gcc -o test a.c b.c我们具体分析&#xff1a;gcc -o test a.c b.c这条命令 它们要经过下面几个步骤&#xff1a; 1&#xff09;对于a.c&#xff1a;执行&#xff1a;预处理 编译 汇编 的过程&#xff0c;a.c >xxx.s >xxx.o 文件。2&#xff09;对于b.c…

算法必刷系列之位运算

位运算 位运算既能在某些条件下提升运算速度&#xff0c;又能在某些条件下节省运算内存。计算机底层涉及大量位运算&#xff0c;位运算可以替代加加减乘除。位运算的基本运算单元是bit&#xff0c;相比于整数的int占据四个字节&#xff0c;大量节约运算空间&#xff0c;适用于…

算法之冒泡排序

算法之冒泡排序 冒泡排序Bubble Sort 交换排序相邻元素两两比较大小&#xff0c;有必要则交换。元素越小或越大&#xff0c;就会在数列中慢慢的交换并“浮”向顶端&#xff0c;如同水泡咕嘟咕嘟往上冒。 核心算法 排序算法&#xff0c;一般都实现为就地排序&#xff0c;输出…

ESP32网络开发实例-物联网声污染监测系统

物联网声污染监测系统 文章目录 物联网声污染监测系统1、KY-038 声音传感器模块2、软件准备3、硬件准备4、代码实现在本文中,我们将使用 ESP32、声音模块和 Blynk 应用程序创建一个基于物联网的声音污染监测系统。 我们将使用 KY-038 麦克风传感器以分贝为单位检测声音并在 OL…

vscode c++ 报错identifier “string“ is undefined

vscode c 报identifier “string” is undefined 问题 新装了电脑, 装好vsc和g等, 发现报错 但开头并没问题 解决 shiftctrlp选择 C/C Edit:COnfigurations (JSON)自动生成打开 c_cpp_properties.json添加g路径等 "cStandard": "c11","cppStanda…