我正在尝试使用np的vectorize,但imshow显示的是黑色图像,如果我正确理解vectorize则应为白色。我认为问题是输出类型,但我无法使其正常工作。

import numpy as np
import cv2
class Test():
    def run(self):
        arr = np.zeros((25,25))
        arr[:]=255
        cv2.imshow('white',arr)
        flatarr = np.reshape(arr,25*25)
        vfunc = np.vectorize(self.func)
        #vfunc = np.vectorize(self.func,otypes=[np.int])#same effect
        flatres = vfunc(flatarr)
        shouldbewhite = np.reshape(flatres,(25,25))
        cv2.imshow('shouldbewhite',shouldbewhite)
    def func(self,a):
        return 255
cv2.namedWindow('white',0)
cv2.namedWindow('shouldbewhite',0)
a = Test()
a.run()
cv2.waitKey(0)

最佳答案

docs:



如果运行以下代码:

class Test():
    def run(self):
        arr = np.zeros((25,25))
        arr[:]=255
        print arr.dtype
        flatarr = np.reshape(arr,25*25)
        vfunc = np.vectorize(self.func)
        flatres = vfunc(flatarr)
        print flatres.dtype
        shouldbewhite = np.reshape(flatres,(25,25))
        print shouldbewhite.dtype
    def func(self,a):
        return 255

您会得到类似的信息:
float64
int32
int32

因此,您的第二种情况被256除,并且是整数除,四舍五入为0。
vfunc = np.vectorize(self.func,otypes=[np.uint8])

并且您可能还需要考虑将第一个数组替换为
arr = np.zeros((25,25), dtype='uint8')

关于python - numpy矢量化后,opencv显示黑色图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14224003/

10-11 16:39