如文件中所述:
IplImage.imageData(来自OpenCV库):
指向对齐图像数据的指针
Image.tostring()(来自Python PIL):
使用标准“raw”返回包含像素数据的字符串 编码器。
Image.tostring()
和IplImage.imageData
的结果有何区别?如果我想获得与Python中IplImage.imageData
返回的完全相同的数据,我该怎么办?
修改 为了澄清,我需要使用PIL来加载图像,因为我有一个python服务来接收来自互联网的数据,并且在OpenCV中没有直接的方式从内存而不是磁盘加载图像。
答案 0 :(得分:3)
在opencv中有一种直接从内存中读取图像的方法。
import cv
# First get the compressed image data. This can be retrieved from
# a socket, a file, or whatever you want.
jpegdata = open('myimage.jpg','r').read()
# Create an opencv matrix to hold the compressed data
cvmat = cv.CreateMatHeader(1, len(jpegdata), cv.CV_8U)
cv.SetData(cvmat, jpegdata, len(jpegdata))
# Now let opencv decompress your image
cvimage = cv.DecodeImage(cvmat, cv.CV_LOAD_IMAGE_COLOR)
import cv2
import numpy as np
# First get the compressed image data. This can be retrieved from
# a socket, a file, or whatever you want.
jpegdata = open('myimage.jpg','r').read()
# Convert your compressed data to a numpy array
nparr = np.fromstring(jpegdata, np.uint8)
# Now use imdecode to decompress it
cvimage = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR)
答案 1 :(得分:1)
当Opencv图像时,像素数据按BGR排序,在PIL中它是RGB。 您可以将PIL图像数据转换为opencv,如下所示。
import Image, cv
pi = Image.open('building.jpg') # PIL image
cv_im = cv.CreateImageHeader(pi.size, cv.IPL_DEPTH_8U, 3)
cv.SetData(cv_im, pi.tostring())
有关详细信息,请点击此处。
http://opencv.willowgarage.com/documentation/python/cookbook.html