Python/OpenCV 将cv转换为cv2

1 投票
1 回答
3819 浏览
提问于 2025-04-17 22:36

我有一个用Python写的脚本,使用了OpenCV库,现在我正在把所有东西更新到OpenCV2(也就是cv2)。问题是,当我用PIL把图像转换成CVarray的时候,出现了一些问题。

pil_im = pil_im.convert('L')
    cv_im = cv.CreateImageHeader(pil_im.size, cv.IPL_DEPTH_8U, 1)
    cv.SetData(cv_im, pil_im.tostring(), pil_im.size[0])

pil_im这个变量在我代码的后面会用到,

# Crop images
        for img in imgList:
            pil_im = Image.open(img)
            cv_im = pil2cvGrey(pil_im)
            faces = DetectFace(cv_im, faceCascade)
            if faces:
                n = 1
                for face in faces:
                    croppedImage = imgCrop(pil_im, face[0], padding)
                    (fname, ext) = os.path.splitext(img)
                    fname = os.path.basename(fname)
                    croppedImage.save(outputimg + '\\' + fname + ' -c' + ext)
                    n += 1

我知道我的代码是正常工作的,只是我想通过只包含CV2来减小pyinstaller生成的exe文件的大小,现在我的代码里同时包含了CV和CV2。

1 个回答

0

据我所知,cv2现在不再使用CVarray类型了。CVarray是C语言数据类型的包装,而现在cv2直接使用numpy的数据结构。要把一个PIL图像转换成cv2数组,可以这样做:

from PIL import Image
import numpy

img = Image.open('lena.png')
array = numpy.array( img )

撰写回答