How to read raw png from an array in python opencv?

后端 未结 6 578
感情败类
感情败类 2020-12-06 05:33

I\'m streaming a png image from my iPhone to my MacBook over tcp. The MacBook code is from http://docs.python.org/library/socketserver.html#requesthandler-objects. How can t

6条回答
  •  清歌不尽
    2020-12-06 06:24

    @Andy Rosenblum's works, and it might be the best solution if using the outdated cv python API (vs. cv2).

    However, because this question is equally interesting for users of the latest versions, I suggest the following solution. The sample code below may be better than the accepted solution because:

    1. It is compatible with newer OpenCV python API (cv2 vs. cv). This solution is tested under opencv 3.0 and python 3.0. I believe only trivial modifications would be required for opencv 2.x and/or python 2.7x.
    2. Fewer imports. This can all be done with numpy and opencv directly, no need for StringIO and PIL.

    Here is how I create an opencv image decoded directly from a file object, or from a byte buffer read from a file object.

    import cv2
    import numpy as np
    
    #read the data from the file
    with open(somefile, 'rb') as infile:
         buf = infile.read()
    
    #use numpy to construct an array from the bytes
    x = np.fromstring(buf, dtype='uint8')
    
    #decode the array into an image
    img = cv2.imdecode(x, cv2.IMREAD_UNCHANGED)
    
    #show it
    cv2.imshow("some window", img)
    cv2.waitKey(0)
    

    Note that in opencv 3.0, the naming convention for the various constants/flags changed, so if using opencv 2.x, you will need to change the flag cv2.IMREAD_UNCHANGED. This code sample also assumes you are loading in a standard 8-bit image, but if not, you can play with the dtype='...' flag in np.fromstring.

提交回复
热议问题