0
import sys, Image, scipy, cv2, numpy
from scipy.misc import imread
from cv2 import cv
from SRM import SRM
def ndarrayToIplImage (source):
"""Conversion of ndarray to iplimage"""
image = cv.CreateImageHeader((source.shape[1], source.shape[0]), cv.IPL_DEPTH_8U, 3)
cv.SetData(image, source.tostring(), source.dtype.itemsize * 3 * source.shape[1])
return image
"""Main Program"""
filename = "snap.jpeg"
Q = 64
im = imread(filename)
name = filename[:-4]
img = Image.fromarray(im)
if img.size[0] > 200 or img.size[1] > 200:
ratio = img.size[0]/img.size[1]
size = int(ratio*200), 200
img = numpy.array(img.resize(size, Image.ANTIALIAS))
srm = SRM(img, Q)
srm.initialization()
srm.segmentation()
classes, map = srm.map()
"""Converting ndarray to PIL Image to iplimage"""
pil_img = Image.fromarray(map)
cv_img = cv.CreateImageHeader(pil_img.size, cv.IPL_DEPTH_8U, 3)
cv.SetData(cv_img, pil_img.tostring(), pil_img.size[0]*3)
print type(cv_img) ##prints <type 'cv2.cv.iplimage'>
"""Using ndarrayToIplImage function also gives the same error!"""
"""
cv_img if of type iplimage but still gives error while using cv.ShowImage()
or cv.SaveImage().
There is no error displayed. Just the console hangs...
"""
我使用的SRM(統計區域合併)提供包被保存由cv.SaveImage()在this page.損壞圖像中的OpenCV
我剛纔已經改變了包裝給出的示例程序。我必須將由SRM包函數返回的類型轉換爲iplimage
。使用該軟件包時沒有錯誤,但在某處使用opencv函數。
這是懸掛後控制檯關閉後保存的圖像。 它使用cv.SaveImage()
。
我試圖cv2.imwrite()
,我得到這個作爲結果:
這是應該已經保存的圖像。我用scipy.misc.imsave('image.jpg', map)
來保存這個。
如果你嘗試'cv2.imwrite()'會發生什麼?你不需要轉換成'IplImage';它可以直接保存'ndarray'。 – Aurelius
@Aurelius我甚至試過,但它沒有幫助,雖然控制檯沒有掛這次。我編輯了所問的問題 –