相关疑难解决方法(0)

使用numpy操作数组后,Python OpenCV绘制错误

我正在用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的答案.

python opencv numpy image image-processing

8
推荐指数
1
解决办法
6749
查看次数

输出数组img的布局与cv :: Mat不兼容(step [ndims-1]!= elemsize或step [1]!= elemsize*nchannels)

我收到此错误:运行以下代码时,输​​出数组img的布局与cv :: Mat(step [ndims-1]!= elemsize或step [1]!= elemsize*nchannels)不兼容:

I1 = cv2.imread('library1.jpg');
I2 = cv2.imread('library2.jpg');
# Load matching points
matches = np.loadtxt('library_matches.txt');
img = np.hstack((I1, I2))
# Plot corresponding points
radius = 2
thickness = 2
for m in matches:
    # draw the keypoints
    pt1 = (int(m[0]), int(m[1]))
    pt2 = (int(m[2] + I1.shape[1]), int(m[3]))
    lineColor = cv2.cv.CV_RGB(255, 0, 0)
    ptColor = cv2.cv.CV_RGB(0, 255, 0)
    cv2.circle(img, pt1, radius, ptColor, thickness)
    cv2.line(img, pt1, pt2, lineColor, thickness)
    cv2.circle(img, pt2, radius, ptColor, thickness)
cv2.imshow("Matches", img)
Run Code Online (Sandbox Code Playgroud)

此代码用于从不同视图中获取两个相似图像中的相应特征.有什么帮助吗?

python opencv

6
推荐指数
1
解决办法
1万
查看次数

numpy.array()中的order参数是什么做AKA什么是连续顺序?

numpy.array()中的order参数有什么作用?

它在文档中说我链接到它将指定数组的连续顺序,但我不知道这是什么意思.那么连续的顺序是什么?

订单参数文档的副本:

order:{'C','F','A'},可选指定数组的顺序.如果order是'C'(默认值),则数组将以C连续顺序排列(last-index变化最快).如果order为'F',则返回的数组将采用Fortran连续顺序(first-index变化最快).如果order是'A',则返回的数组可以是任何顺序(C-,Fortran-连续,甚至是不连续的).

c python arrays numpy

6
推荐指数
1
解决办法
3447
查看次数

标签 统计

python ×3

numpy ×2

opencv ×2

arrays ×1

c ×1

image ×1

image-processing ×1