arg*_*m2f 8 python opencv numpy image image-processing
我正在用OpenCV读取图像,并尝试用numpy做一些事情(旋转90度).imshow从matplotlib 查看结果,这一切似乎都很好 - 图像旋转.但是,我不能在新图像上使用OpenCV的绘图方法.在以下代码中(我在sagemath云工作表中运行此代码):
%python
import cv2
import matplotlib.pyplot as plt
import numpy as np
import os, sys
image = np.array( cv2.imread('imagename.png') )
plt.imshow(image,cmap='gray')
image = np.array(np.rot90(image,3) ) # put it right side up
plt.imshow(image,cmap='gray')
cv2.rectangle(image,(0,0),(100,100),(255,0,0),2)
plt.imshow(image,cmap='gray')
Run Code Online (Sandbox Code Playgroud)
我在cv2.rectangle()命令上收到以下错误:
TypeError: Layout of the output array img is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)
Run Code Online (Sandbox Code Playgroud)
如果我np.array(np.rot90(image,4) )改用(即旋转360),错误就会消失.因此,维度的变化似乎搞砸了.OpenCV是否在内部存储了我需要更新的维度或其他内容?
编辑:解决问题image = image.copy()后添加rot90().请参阅下面的rayryeng的答案.
ray*_*ica 10
这显然是Python OpenCV包装器中的一个错误.如果你在这里看一下这个问题:np.rot90()会破坏opencv图像,显然做一个不会导致原始尺寸的旋转会破坏图像,并且该帖子中的OP会遇到你所遇到的同样错误.FWIW,我也经历过同样的错误....不知道为什么.
解决此问题的方法是在旋转后制作图像的副本,然后显示图像.这个我无法解释,但似乎有效.另外,请确保plt.show()在代码末尾调用以显示图像:
import cv2
import matplotlib.pyplot as plt
import numpy as np
import os, sys
image = np.array( cv2.imread('imagename.png') )
plt.imshow(image,cmap='gray')
image = np.array(np.rot90(image,3) ) # put it right side up
image = image.copy() # Change
plt.imshow(image,cmap='gray')
cv2.rectangle(image,(0,0),(100,100),(255,0,0),2)
plt.imshow(image,cmap='gray')
plt.show() # Show image
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6749 次 |
| 最近记录: |