convert openCV image into PIL Image in Python (for use with Zbar library)

后端 未结 4 585
长发绾君心
长发绾君心 2021-02-05 01:18

I\'m trying to use the Zbar library\'s QR code detection methods on images I extract with OpenCV\'s camera methods. Normally the QR code detection methods work with images (jpg,

相关标签:
4条回答
  • 2021-02-05 01:40

    Are you trying to obtain a RGB image? If that is the case, you need to change your parameters from this:

    cv_im = cv.CreateImage((320,200), cv.IPL_DEPTH_8U, 1)
    pi = Image.fromstring("L", cv.GetSize(cv_im), cv_im.tostring())
    

    to that:

    cv_im = cv.CreateImage((320,200), cv.IPL_DEPTH_8U, 3)
    pi = Image.fromstring("RGB", cv.GetSize(cv_im), cv_im.tostring())
    

    since it is documented almost nowhere, but the 'L' parameter of Image.fromstring is for 8-bit B&W images. Besides, you need to change the argument of your cv.CreateImage function from 1 (single channel image) to 3 (3 channels=RGB).

    Hope it works for you. Cheers

    0 讨论(0)
  • 2021-02-05 01:55

    With the python CV2, you can also do this:

    import Image, cv2
    
    cap = cv2.VideoCapture(0) # says we capture an image from a webcam
    _,cv2_im = cap.read()
    cv2_im = cv2.cvtColor(cv2_im,cv2.COLOR_BGR2RGB)
    pil_im = Image.fromarray(cv2_im)
    pil_im.show()
    
    0 讨论(0)
  • 2021-02-05 01:56

    A simple way is to directly swap the channels. Suppose you are trying to convert a 3-channel image file between OpenCV format and PIL format. You can just use:

    img[...,[0,2]]=img[...,[2,0]]
    

    In this way, you won't be bothered with cv2.cvtColor as this function only works on images with certain depth.

    0 讨论(0)
  • 2021-02-05 02:02

    I think I may have found the answer. I'll edit later with results.

    OpenCV to PIL Image

    import Image, cv
    cv_im = cv.CreateImage((320,200), cv.IPL_DEPTH_8U, 1)
    pi = Image.fromstring("L", cv.GetSize(cv_im), cv_im.tostring())
    

    Source: http://opencv.willowgarage.com/documentation/python/cookbook.html

    0 讨论(0)
提交回复
热议问题