Anaconda下Jupyter Notebook执行OpenCV中cv2.imshow()报错(错误码为1272)网上解法汇总记录和最终处理方式

news2025/1/19 23:14:59

零、我设备的相关信息

  • Python 3.8.8
  • Anaconda3 2021.05
  • 查询匹配python3.8.*的OpenCV匹配版本为:4.1.* — 4.2.*,我最后安装4.2.0.32版本
  • 如下我记录了 “从发现问题,到不断试错,最后解决问题” 的完整过程,以备自己复盘使用,大家不愿费时的可直接查看总结版的处理方式记录

一、问题起源

  • 学校计算机视觉课要求完成实验,里头涉及OpenCV的使用,但对于cv2.imshow()语句总是会报错
  • 报错信息如下:
    • 在这里插入图片描述

    • cv2.error: OpenCV(4.8.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:1272: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage''

    • 错误码:1272


二、试错过程

  • 我网页检索相关错误的处理方式总结如下:

2.1 Anaconda之前没通过正规下载OpenCV的方式导致的问题(×)

  • 实验课第一节课老师叫我们安装OpenCV包,我没安装OpenCV的印象,但却发现anaconda里已有OpenCV,所以猜测多半是去年做课设的时候,提前安装过了。但可能当时着急用,没有通过正规安装,直接把别人下载好的包文件添加到根目录的site-packages下,可能是没复制完全所以导致报错里显示找不到window.cpp
  • 对于该条可能性错误,我处理方式:卸载原有的opencv-python,重新安装了,但并未解决问题

2.2 只安装了OpenCV,没匹配安装如下四个包(×)

  • ①opencv-python(只包含主模块)
  • ②opencv-contrib-python(包含main和contrib模块)
  • ③opencv-python-headless(与opencv-python相同,但没有GUI功能)
  • ④opencv-contrib-python-headless(与opencv-contrib-python相同,但没有GUI功能)
  • 对于该条可能性错误,我处理方式:
    • 一开始把这四个包全安装了最新版本,但安装后还是报错
    • 所以又继续找问题,说是可能第①个包opencv-python下载要匹配python版本,而其余②③④也要匹配①的版本
    • 于是我又根据python版本下载了各自匹配的四个包,但都并没有解决问题
    • 并且最后查询多个博客分享后得知,并不需要四个包都下载,一般留一个①即可,于是我都卸载了留下①opencv-python=4.2.0.32

2.3 Anaconda使用不当,导致设置错乱(×)

  • 我留下了opencv-python=4.2.0.32后,它依旧报错,并且报错原因和原来一致,甚至发现报错里显示的依旧是最新版opencv-python=4.8.0,可是conda list查询后明明版本已经更改,如若继续同样错误,也应该是显示当前conda list里的版本吧?
  • 对于该条可能性错误,我处理方式:
    • 我寻思可能因为课设时,对Anaconda使用不当,不知道哪里被我设置错乱了。我想着实在不行彻底卸载重装大法,总能清理掉之前错误的设置,解决掉设置错乱吧!
    • 于是有了我这篇博客:Anaconda彻底卸载及重安装
    • 但可惜的是卸载重装后,依旧是这样的问题。

2.4 opencv版本匹配到别的软件上了(×)

  • 对于卸载重装后错误显示依旧未有任何变化,并且其他cv2的使用正常的情况让我怀疑jupyter里的opencv用的不是我下载的,我猜想是否我把刚下载的匹配版opencv下载到另个环境里,导致用的不是我刚刚下载的匹配版opencv。
  • 对于该条可能性错误,我处理方式:
    • 卸载了opencv,直接尝试import cv2可以执行,并未出错。
    • 于是我顺着这条方向找到了这篇文章:因OpenCV版本不一致所引发的报错。我理解讲的大致讲的是在Anaconda里安装OpenCV包之前,Anaconda就匹配上其他软件自带的OpenCV了,而其他软件里OpenCV出错了,所以导致Anaconda引用使用时也出错了。
      • 我觉得这个思路能很好解释了“为什么Anaconda里再怎么下载安装相关的包都对问题造成不了影响和变化”。解释了为什么不管版本是不是最新4.8,或者不管有没有安装OpenCV,它出错都是报同个版本4.8,也都能正常导入import cv2
      • 于是我通过everthing的全盘检索,找到了所有自带有OpenCV的软件,其中显眼的是:MATLAB和Qt
    • 可若真是这两个自带软件的问题,我就需要卸载这两个软件,避免被jupyter里的OpenCV匹配上,但考虑到①安装这俩软件我之前也挺费劲的,不是很愿意删除掉;②就算卸载,之后可能还需要用上这两个软件,到时候还是得处理这个问题,相当于卸载只是延迟了问题;③若卸载依旧仍未成功解决问题,我又徒增两个软件卸载干净与重安装的问题。
      • 于是我想着是否能更改已生成的OpenCV链接→就找到了MATLAB和QT对应的cmakelists.txt文件,尝试打开后修改OpenCV相关的版本依赖,但每个.txt文件都没有出现opencv这个关键词。
      • 于是我就想着是不是我自己没找全或者找对依赖文件(也就是OpenCV依赖信息并不存在cmakelists.txt文件里,所以我才找不到)→ 于是我想着既然我改不了,那我在环境变量中把Anaconda的环境变量配置全置顶,也能避免Anaconda的环境配置优先受到其他软件的影响。但事实证明,更改后依旧没有用。 在这里插入图片描述

2.5 查看python解释器环境(√)

  • 由于2.4中提及的三点考虑因素,我依旧不愿意卸载MATLAB和Qt,想着是否还有其他可循的思路。我首先通过以上的试错,可总结如下几点确定的信息:
    • ① 想成功执行cv2.imshow()语句,仅需opencv-python包即可
    • ② 报错信息中的OpenCV(4.8.0)与Anaconda一点关系没有(在Anaconda中怎么下载安装opencv或卸载都无用)
    • ③ 使用出错的OpenCV(4.8.0)不在Anaconda相关的路径下
    • 基于如上三点的考虑,我确认了目前解决问题的方向是:找到OpenCV(4.8.0)到底是谁的引用
  • 因此我再次使用everthing进行全盘对opencv关键字的检索,发现除了MATLAB和Qt,还有两个目录下出现了opencv,而如下两个都是系统相关的并不是某个软件自带→于是我动摇了2.4中,jupyter的引用是由于MATLAB和Qt导致的猜想。
    在这里插入图片描述
  • 并且在问题检索的过程里,我查询到了以下两条命令,是用于查看Python 解释器相关的系统环境参数
    import os
    os.sys.path
    
    • 查询结果如下:在这里插入图片描述
    • 对结果的分析:由于总结③中说明了“使用出错的OpenCV(4.8.0)不在Anaconda相关的路径下”,所以直接不必看Anaconda3的路径,筛选后只剩下红框出来的系统用户路径
    • 于是顺着该路径进入文件夹后,发现目录下的存在一个cv2文件夹,并且时间显示为23-07-02符合opencv4.8.0版本的时间。我怀疑找到了问题所在,但不确定于是并未直接删除该文件,仅是转移到另个位置(同时转移过程中,系统提示我文件夹中的cv2.pyd文件正在被使用,我当时是并未退出jupyter的,所以就更相信问题与这个文件夹有关了。)
      在这里插入图片描述
  • 问题被解决:
    • 当移除该目录下的cv2文件夹后,我再次运行import cv2显示找不到该库,我知道问题被解决了(因为我当时完全卸载了Anaconda中的opencv-python包,而Anaconda终于对该问题有了影响)
    • 我按照python匹配的版本,下载安装了opencv-python,最后终于正常显示结果在这里插入图片描述

三、总结版处理方式

  • 前提:确认Anaconda中怎么更改opencv-python版本,甚至直接卸载opencv-python,Anaconda里import cv2都能正常运行,且报错时的版本都不变,就可以考虑如下解决方式:
  • ①通过如下命令,查看Python 解释器相关的系统环境参数
import os
os.sys.path
  • ②不必考虑Anaconda有关路径,直接进入你对应显示的用户路径(和我图里的不一样,你得找你自己的)在这里插入图片描述
  • ③找到,并把cv2文件剪切到其他地方去(先别删除,以防不是这个导致的)
    • 若提示 cv2.pyd文件正在被使用不能移动,就关闭jupyter后单独把这个文件再移动一下,总之得让这个目录下不存在cv2这个文件夹了
      在这里插入图片描述
  • ④移除后,再次运行,即可正常执行cv2.imshow()

四、反思总结

  • 当问题发生时:
  • ①虽然最好能找到出现同样错误的人的总结,根据他们的处理方式一步步执行并纠错。这是最保险的(因为中间可能出现的错别人走过了)、也是最迅速的(因为只要照做即可)。但必须考虑到,很多错误并不是很常见的,因此网上并非能这么容易找到,刚好和你问题一致并且很完美的解决处理;并且即使问题报错信息一致,但导致的原因可能千差万别,因此同个问题,别人适用的解决方式,给你未必适用(所以才会有了解决问题过程中的不断试错)
  • ② 所以要学会配合每个错误提示与博客他人的分析,追根溯源找到你自己问题出错的本质原因,发现本质原因后,就要适当根据具体情况调整浏览器的检索方式
    • 比如我一开始可能是直接把报错信息复制粘贴到浏览器中搜索
    • 后期我发现出错的opencv版本对应不上Anaconda,我就检索opencv版本错乱原因
    • 并且最终我得以解决问题的重要命令:os.sys.path,也不是靠一开始的搜索就找到的,也是后面零零碎碎问题查找中对于处理相关的问题,别人提供的思路。
  • ③ 合理评估每个可能解决途径背后需要承担的风险,不能看到什么可能解决的路径就完全不考虑后果地去走通尝试一下
    • 比如卸载MATLAB和Qt,当时情况下只有这条路能走,但这种情况下就要考虑一下卸载后若依旧无法解决问题的风险我是否能承担
    • 若一些可能走的路风险太大,就可以先总结一下试错过程中得到的正确信息,并总结接下来问题解决的方向(在试错过程里一定要时刻都很明确自己目前要解决的问题!很明确自己现在在干什么!别把自己绕晕),清楚自己的底气和方向之后,再去思考有没有别的路可以尝试摸索的
  • ④ 自己处理不来的时候,就向他人寻求帮助
    • 我习惯自己处理问题,但这个问题我实在找不通路的情况下,就总结了自己试错的收获与接下来的方向后,向老师提出的询问,最后老师的处理方式虽然并未走通,但沟通的过程中能帮助你总结其他试错得到的信息、也有几率能开拓思路。
    • 比如我和老师的沟通中,老师提出了“opencv根本就没在anaconda路径下”的判断与尝试多考虑考虑opencv可能相关的环境配置。这两点都对最后解决问题提供了帮助。

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

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

相关文章

二叉树顺序存储结构

目录 1.二叉树顺序存储结构 2.堆的概念及结构 3.堆的相关接口实现 3.1 堆的插入及向上调整算法 3.1.1 向上调整算法 3.1.2 堆的插入 3.2 堆的删除及向下调整算法 3.2.1 向下调整算法 3.2.2 堆的删除 3.3 其它接口和代码实现 4.建堆或数组调堆的两种方式及复杂度分析…

SpringCloud Eureka搭建会员中心服务提供方-集群

😀前言 本篇博文是关于SpringCloud Eureka搭建会员中心服务提供方-集群,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您…

【Transformer系列】深入浅出理解Attention和Self-Attention机制

一、参考资料 课件:10_Transformer_1.pdf 视频:Transformer模型(1/2): 剥离RNN,保留Attention 二、Attention without RNN Attention模型可以看到全局的信息。 本章节以 Seq2Seq( (encoder decoder)) 模型为例&…

算法通关18关 | 回溯模板如何解决复原IP问题

18关的前几篇文章看过之后,对回溯的模板问题基本解题思路就知道了,就是固定的for循环问题,外层for循环控制横向,递归控制纵向,还要考虑撤销操作和元素是否能被重复利用问题,重复利用的情景较少,…

【物联网】简要解释RTK(Real-Time Kinematic)>>实时动态差分定位

引言: RTK(Real-Time Kinematic)技术是一种基于差分GPS的高精度定位技术,它通过实时通信和数据处理,能够提供厘米级甚至亚米级的定位精度。RTK技术在许多领域都得到了广泛应用,如测绘、航空航天、农业等。本…

C++ 内存模型 Memory Model

CPU 现在CPU都是多核结构,每个核心都有自己的一级缓存,二级缓存,以及共享的三级缓存。如下图,其中一级缓存分为指令缓存IL1和数据缓存DL1,二级缓存L2 256kB,三级缓存 L3 8MB。 从上图可以看出L3比L2大得多…

从零开始:PostgreSQL入门完全指南

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

【漏洞复现】大华智慧园区综合管理平台前台任意文件上传漏洞

文章目录 前言声明一、简介二、影响范围三、资产搜索四、漏洞测试四、修复建议前言 大华智慧园区综合管理平台存在前台任意文件上传漏洞,攻击者可通过特定Payload获取服务器敏感信息,进而获取服务器控制权限。 声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用…

树和二叉树的相关概念及结构

目录 1.树的概念及结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.3.1 孩子兄弟表示法 1.3.2 双亲表示法 1.4 树的实际应用 2.二叉树的概念及结构 2.1 二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储 2.4.1 顺序存储 2.4.2 链式存储 1.树…

idea内存不足

The IDE is running low on memory and this might affect performance. Please consider increasing available heap. 参考 【IDEA】The IDE is running low on memory and this might affect performance._datagrip提示ide內存不足_Coder_贾俊浩的博客-CSDN博客 (亲测好用…

零基础教你搭建日用百货线上商城小程序

在当今的数字化时代,小程序商城已成为许多企业和商家的首选平台,尤其是日用百货行业。通过小程序商城,消费者可以更方便地购买各类日用品,商家也可以提高销售效率、扩大市场影响力。本文将详细介绍如何从零开始制作一个日用百货小…

论文解读 | MVSNet:非结构化多视图立体的深度推理

原创 | 文 BFT机器人 这篇论文的题目是《MVSNet: Depth Inference for Unstructured Multi-view Stereo》。这是一篇关于深度学习在多视角立体视觉(MVS)中的应用的研究论文。MVS任务的目标是从多个视角的图像中还原出三维场景的深度信息,从而…

佛山融资融券(两融)开户利率最低能做到多少?5%!

佛山融资融券(两融)开户利率最低能做到多少?5%! 具体佛山融资融券(两融)开户利率最低能做到多少,需要根据不同的券商政策而定。不同的券商可能具有不同的优惠政策和开户条件,因此开户前应该仔细了解券商的政策和条件。 融资融券是投资者通过证券公司向…

VScode配置Ros环境

VScode配置Ros环境 VScode配置Ros环境 1. VSCode下载 直接百度搜索VScode,去官网安装Ubuntu版本的VScode,下载完成之后用Ububtu Software进行安装。 2. VScode配置 2.1 功能包配置 下载完成之后直接打开ROS的工作目录,之后安装ROS包。 …

LeetCode 238. 除自身以外数组的乘积

题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目解析 使用前缀和进行解决该题,只不过与之前前缀和不同的是这个题目计算前缀和的时候不需要计算当前元素,也就是当前位置前缀和的值其实是不包含当前元素的前缀和。…

递归二进制【典中典】

洛谷 #include<iostream> #include<algorithm> using namespace std; const int N3e7; int path[N]; int n,idx;//我们使用二进制的形式来解决这个问题 //移位运算的优先级高于按位与的优先级 void dfs(int x,int st) {if(xn){path[idx]st;return;}//选----1dfs(x1…

C语言之指针进阶篇(3)

目录 思维导图 回调函数 案例1—计算器 案例2—qsort函数 关于qsort函数 演示qsort函数的使用 案例3—冒泡排序 整型数据冒泡排序 回调函数搞定各类型冒泡排序 cmp_int比较大小 cmp传参数 NO1. NO2. 解决方案 交换swap 总代码 今天我们学习指针难点之回调函数…

网站搭建从零开始(0)--域名的选择与解析

目录 确定用途 购买域名 使用可靠的注册商购买域名 想好域名关键词 检查域名是否可用 添加域名到购物车并完成购买 域名的解析 登录注册商账户 选择要配置的域名 进入DNS解析设置 添加DNS记录 保存配置 检查解析是否生效 提示 确定用途 在购买域名之前&#xf…

基于 MATLAB 的电力系统动态分析研究【IEEE9、IEEE68系节点】

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

TypeScript接口和类

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 接口 类 在 TypeScript 中&#xff0c;接口&#xff08;Interfaces&#xff09;和类&#xff08;Classes&#xff…