如何在python中从调用cv2.imread()后得到的图片中截取一块矩形部分?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python中从调用cv2.imread()后得到的图片中截取一块矩形部分?相关的知识,希望对你有一定的参考价值。

1、首先导入os模块。os模块直接和操作系统联系。

2、然后调用wav文件。os.system()函数调用声音文件‘gx.wav'。

3、测试结果如图,要有音箱或耳麦才能听到。

4、接着run运行,或按f5键。

5、wav文件可以调用,mp3文件也可以调用哦。音乐文件的文件名及后缀改为.mpe3。其余代码不变。

参考技术A #参考代码
import cv2
img = cv2.imread('test.jpg',0)
crop_img = img[300:400, 50:300]
cv2.imshow("image", crop_img)
cv2.waitKey(0)

本回答被提问者采纳

cv2.imread 总是返回 NoneType

【中文标题】cv2.imread 总是返回 NoneType【英文标题】:cv2.imread always returns NoneType 【发布时间】:2013-07-30 17:34:35 【问题描述】:

cv2.imread 总是返回 NoneType

我在 64 位 Windows 7 上使用 python 版本 2.7 和 OpenCV 2.4.6。

也许这是某种错误或权限问题,因为在另一台计算机上完全相同的 python 和 cv2 包安装工作正常。代码如下:

im = cv2.imread("D:\testdata\some.tif",CV_LOAD_IMAGE_COLOR)

我从http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 下载了 OpenCV。任何线索将不胜感激。

【问题讨论】:

尝试使用 cv2.imread(r"D:\testdata\some.tif",CV_LOAD_IMAGE_COLOR)。 r 将字符串转换为不会转义特殊字符的“原始字符串”,因此您将看到更合理的结果。这是因为默认情况下,python 字符串接受某些特殊的“转义序列”。例如,'\n' 是一个新行。有关更多详细信息,请参阅此处:docs.python.org/2/reference/lexical_analysis.html。也看看路径是否存在。 导入操作系统打印 os.path.exists(r'D:\testdata\some.tif')。查看路径是否存在。删除 r,我确定它不会起作用。 【参考方案1】:

首先,确保路径有效,不包含任何单个反斜杠。检查其他答案,例如https://***.com/a/26954461/463796.

如果路径已修复但图像仍未加载,则可能确实是 OpenCV bug,截至 2013 年尚未解决。cv2.imread 在 Win32 下对我来说也无法正常工作。

同时,使用 LoadImage,它应该可以正常工作。

im = cv2.cv.LoadImage("D:/testdata/some.tif", CV_LOAD_IMAGE_COLOR)

【讨论】:

我怀疑它是否适用于这条路径。您需要像 r"D:\testdata\some.tif" 这样的原始前缀 @Jean-FrançoisFabre 确实如此。我更改了答案以指出路径问题并在示例代码中对其进行了修复。我相信在撰写答案时,某些图像仍然需要解决方法,即使路径正确,所以我将保留答案。 图片加载,但返回的类型仍然是 None @NelsonGon 在这个问题的上下文中,这似乎是矛盾的。如果图像加载,你会得到一个句柄,这不能是 None。您有任何信息要添加到此答案中吗?否则,可能会针对您的情况提出一个新问题,但请提供有关具体情况的更多信息。 我可以看到带有imshow 的图像,但我无法看到图像的shape,因为它是None 而不是数组。最后,我使用了matplotlibimread,似乎解决了这个问题(我不知道为什么)。【参考方案2】:

在我的情况下,问题是路径中的空格。在我将图像移动到没有空格的路径后,它起作用了。

【讨论】:

【参考方案3】:

尝试改变斜线的方向

im = cv2.imread("D:/testdata/some.tif",CV_LOAD_IMAGE_COLOR)

或在字符串的开头添加 r

im = cv2.imread(r"D:\testdata\some.tif",CV_LOAD_IMAGE_COLOR)

【讨论】:

"尝试改变斜线的方向"。为什么只是尝试?使用转义标记确实是一个错误,必须通过您提到的任一解决方案或使用双 \ 而不是简单 \ 的第三种解决方案来纠正,转义序列专门为此构建。 【参考方案4】:

偶然发现了这个。

解决方案非常简单但不直观。

如果您使用相对路径,则可以分别使用 test\pic.jpgtest/pic.jpg 中的“\”或“/” 如果你使用绝对路径,你应该只使用'/',如/.../test/pic.jpg for unix 或C:/.../test/pic.jpg for windows 为了安全起见,只需将for root, _, files in os.walk(<path>):abs_path = os.path.join(root, file) 结合使用。之后调用 imread,就像在 img = ocv.imread(abs_path) 中一样,总是可以工作的。

【讨论】:

在 linux 上,~/path/file.jpg 不起作用,必须替换为 ~/home/user/path/file.jpg 赞成使用os.path.join【参考方案5】:

我之前在 ubuntu 18.04 上也遇到过同样的问题。

cv2.imread(path)

当我将 path 参数从 Relative_File_Path 更改为 Absolute_File_Path 时,我解决了这个问题。

希望有用。

【讨论】:

【参考方案6】:

如果这个问题中没有人提到,另一种解决方法是使用plt 读取图像,然后将其转换为BGR 格式。

img=plt.imread(img_path)
print(img.shape)
img=img[...,::-1]

在 cv2.imread does not read jpg files

【讨论】:

【参考方案7】:

这需要很长时间才能解决。首先确保文件在目录中,并检查即使 Windows 资源管理器说文件是“JPEG”,它实际上是“JPG”。第一个打印语句是确保文件实际存在的关键。我是一个初学者,所以如果代码很糟糕,那就这样吧。 代码,只是导入一张图片并显示它。如果代码找到该文件,那么将在 python 窗口中打印 True。

import cv2
import sys
import numpy as np
import os

image_path= "C:/python27/test_image.jpg"
print os.path.exists(image_path)



CV_LOAD_IMAGE_COLOR = 1 # set flag to 1 to give colour image
CV_LOAD_IMAGE_COLOR = 0 # set flag to 0 to give a grayscale one
img = cv2.imread(image_path,CV_LOAD_IMAGE_COLOR)
print img.shape
cv2.namedWindow('Display Window') ## create window for display
cv2.imshow('Display Window', img) ## Show image in the window
cv2.waitKey(0) ## Wait for keystroke
cv2.destroyAllWindows() ## Destroy all windows

【讨论】:

【参考方案8】:

我遇到了类似的问题,将图像名称更改为英文字母对我有用。此外,它不适用于数字名称(例如 1.jpg)。

【讨论】:

【参考方案9】:

我的操作系统是 Windows 10。我注意到 imread 对路径非常敏感。没有任何关于斜线的建议对我有用,所以我如何设法解决问题:我已将文件放入项目文件夹并输入: img = cv2.imread("MyImageName.jpg", 0)

所以没有任何路径和文件夹,只有文件名。这对我有用。 还可以尝试来自不同来源和不同格式的不同文件

【讨论】:

【参考方案10】:
>>> im=cv2.imread("C:\Users\Virgile\Downloads\red.JPG")
>>> print im
None

>>> im=cv2.imread("C:/Users/Virgile/Downloads/red.JPG")
>>> print im
[[[ 15  36  51]
  [ 18  34  51]
  [ 19  33  51]
  ...,

(用opencv 3.0.0测试)

【讨论】:

您的第一个案例失败了,因为 python 将 \r 视为回车符 - 根本不是 opencv 的错。 in python 第一行的正确拼写方法是cv2.imread(r"C:\Users\Virgile\Downloads\red.JPG") - 那个小r 告诉它不要对反斜杠做任何坏事 它与 cv2 没有任何关系。在第一种情况下,路径不存在并且 imread 返回 None 不,不起作用,在我的情况下没有返回。【参考方案11】:

我花了一些时间才发现这个错误是由我的案例中损坏的图像文件引起的。所以请手动检查你的文件,确保它是有效的,并且可以被普通的图像查看器打开。

【讨论】:

【参考方案12】:

我有一个类似的问题,改变斜线的方向有效:

/ 更改为\

【讨论】:

"将 / 更改为 \"。你错了。首先这是一个 Python 问题,通常在将 Windows 路径编写为字符串时发现,因为路径中的“\”是 Python 中的转义标记。在 Python 中,可以转义几个不可打印的字符(如 CR),即使用 转义标记 '\' 和字母的组合编写,例如 '\r' 表示 'CR'。字符串“\red”包含不需要的“CR”。其次,为了防止这种情况使用“原始字符串”,如 'r\red',其中 '\' 没有特殊含义,请在路径中使用 '/' 而不是 '\' (Python 容错),或使用转义序列 '\\ ' 专门用来创建一个简单的 '\'。【参考方案13】:

我遇到过这个。原来 PIL 模块提供了这个功能。 同样,在我安装 PIL 之前,numpy.imread 和 scipy.misc.imread 都不存在

在我的配置(win7 python2.7)中,是这样完成的:

cd /c/python27/scripts
easy_install PIL

【讨论】:

以上是关于如何在python中从调用cv2.imread()后得到的图片中截取一块矩形部分?的主要内容,如果未能解决你的问题,请参考以下文章

在python中从opencv中分离多个canny边缘检测的坐标

未找到 cv2.imread 标志

cv2.imread 总是返回 NoneType

python 笔记: cv2包

python如何利用cv2模块读取显示保存图片

python cv2在验证码识别中的使用