Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用NumPy填充图像会返回全部黑色_Python_Numpy_Opencv_Image Processing - Fatal编程技术网

Python 使用NumPy填充图像会返回全部黑色

Python 使用NumPy填充图像会返回全部黑色,python,numpy,opencv,image-processing,Python,Numpy,Opencv,Image Processing,我使用NumPy创建了一个新的2D数组,其中边框为0,内部为原始图像的数组。我打印新阵列,这是我所期望的。但是当我画它的时候,它全是黑色的 我试过用loop和NumPy,没用 import cv2 import numpy as np path = 'test.jpg' img = cv2.imread(path,0) print(img) height,width = img.shape # 440 * 455 new_arr = np.zeros((height+2,wid

我使用NumPy创建了一个新的2D数组,其中边框为0,内部为原始图像的数组。我打印新阵列,这是我所期望的。但是当我画它的时候,它全是黑色的

我试过用loop和NumPy,没用

import cv2
import numpy as np

path = 'test.jpg'
img = cv2.imread(path,0)

print(img)
height,width = img.shape       # 440 * 455

new_arr = np.zeros((height+2,width+2), dtype = int)

#for i in range(height):
#   for j in range(width):
#      new_arr[i+1][j+1] = img[i][j]

new_arr[1:height+1,1:width+1] = img
print(new_arr)


cv2.imshow('new image',new_arr)
cv2.waitKey(0)
cv2.destroyAllWindows()
原始图像如下:


我希望图像具有黑色边框(仅1像素),内部是原始图像以进行中值滤波,但实际输出是黑色图像。

不确定如何获得黑色图像,因为您的代码可能会抛出错误。您需要在适当的命名空间(
np.
)中设置
dtype
值,该值应为
uint8

import cv2
import numpy as np

path = 'test.png'
img = cv2.imread(path,0)

height,width = img.shape

new_arr = np.zeros((height+2,width+2), dtype = np.uint8)

new_arr[1:height+1,1:width+1] = img
print(new_arr)

cv2.imshow('new image',new_arr)
cv2.waitKey(0)
cv2.destroyAllWindows()
请注意您提供的图像是
png
,而不是
jpg
。在该图像上测试的代码


不确定您是如何得到黑色图像的,因为您的代码应该抛出一个错误。您需要在适当的命名空间(
np.
)中设置
dtype
值,该值应为
uint8

import cv2
import numpy as np

path = 'test.png'
img = cv2.imread(path,0)

height,width = img.shape

new_arr = np.zeros((height+2,width+2), dtype = np.uint8)

new_arr[1:height+1,1:width+1] = img
print(new_arr)

cv2.imshow('new image',new_arr)
cv2.waitKey(0)
cv2.destroyAllWindows()
请注意您提供的图像是
png
,而不是
jpg
。在该图像上测试的代码


尝试使用
np.zero((…),dtype=uint8)
@Cris无法工作,错误namespace@FlashThunder:它很接近,指向问题所在。我发布了一条评论而不是答案,因为我知道语法可能不准确。请尝试使用
np.zeros((…),dtype=uint8)
@Cris不起作用,错了namespace@FlashThunder:它很接近,指向问题所在。我只是发表评论而不是回答,因为我知道语法可能不准确。OpenCV
Mat
class支持带符号的32位整数,这样的数组可以使用
cv::imshow
显示。这可以通过文档进行验证,并使用
cv2.imshow(“”,np.zeros((100100),dtype=np.int32))进行测试;cv2.waitKey()
。这并不是说
int
在这里是一个合适的选择,但是你文章的第一句话是不正确的。编辑了我的答案,+1用于注释,在这种情况下仍然是int32将不起作用。OpenCV
Mat
class支持带符号的32位整数,并且可以使用
cv::imshow
显示这样的数组。这可以通过文档进行验证,并使用
cv2.imshow(“”,np.zeros((100100),dtype=np.int32))进行测试;cv2.waitKey()
。这并不是说
int
在这里是一个合适的选择,但是你文章的第一句话是不正确的。编辑了我的答案,+1用于评论,在这种情况下仍然是int32将不起作用。