【发布时间】:2015-07-26 18:16:18
【问题描述】:
我正在使用 OpenCV 读取图像,并尝试在 numpy 中对其进行处理(旋转 90 度)。使用 matplotlib 中的imshow 查看结果,一切似乎都运行良好 - 图像已旋转。但是,我不能在新图像上使用来自 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')
cv2.rectangle() 命令出现以下错误:
TypeError: Layout of the output array img is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)
如果我改用 np.array(np.rot90(image,4) )(即旋转 360 度),错误就会消失。所以看起来尺寸的变化把它搞砸了。 OpenCV 是否将尺寸存储在我需要更新的内部某处?
编辑:在rot90() 之后添加image = image.copy() 解决了这个问题。请参阅下面 rayryeng 的回答。
【问题讨论】:
标签: python image opencv image-processing numpy