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我甚至试过,但它没有帮助,虽然控制台没有挂这次。我编辑了所问的问题 –