Python .displate()OpenCV的替代方法
我正在脚本中使用Python .displate()OpenCV的替代方法,python,opencv,pillow,Python,Opencv,Pillow,我正在脚本中使用cv2和枕头: image = Image.open("img1.png") #do some stuff to the image image.save("result1.png") image = cv2.imread("result1.png") kernel = np.ones((5, 5), np.uint8) dilated_image = cv2.dilate(image, kernel, iterations=3) cv2.imwrite("result2.pn
cv2
和枕头
:
image = Image.open("img1.png")
#do some stuff to the image
image.save("result1.png")
image = cv2.imread("result1.png")
kernel = np.ones((5, 5), np.uint8)
dilated_image = cv2.dilate(image, kernel, iterations=3)
cv2.imwrite("result2.png", dilated_image)
final_image = Image.open("result2.png")
#do some other stuff to the image
final_image.save("final_result.png")
如您所见,我必须在OpenCV
和Pillow
之间切换,并保存三张图像。我想要的是只保存一个结果,而不是三个结果
有没有一种方法,我可以继续使用枕头,在不使用cv2的情况下,以几乎相同的执行速度扩展图像
我已经尝试了
image.filter(ImageFilter.MaxFilter(size=3))
,但它占用了太多的CPU时间。它花费太多时间的原因是,为了获得与cv2.deplate(image,kernel,iterations=5)
相同的效果,我应该至少使用image.filter(ImageFilter.MaxFilter(size=15))
如果您只是在为标准库中的函数寻找OpenCV替代方案,然后你可以试试SciPy的函数(所以问题)这个函数怎么样?@ikkuh我已经试过了,而且速度要慢得多,因为迭代次数应该比CV2大。为什么不手动实现形态学操作呢?@JohnSmith在我看来,模块是最接近的——看看这个。不幸的是,它似乎只支持3x3内核“在CPU时间上不会变慢”——对此表示怀疑。OpenCV实现是手工矢量化的,粗略地看,在代码库中没有任何优化级别。而用纯Python编写的任何东西都不可能达到与之匹配的速度。正如@DanMašek所说的,使用手动实现,就没有机会达到与之匹配的速度。如果您想避免使用OpenCV,SciPy是您的最佳选择。否则,您将需要放弃一项要求。在OpenCV上复制迭代
最简单的方法就是手动迭代Pillow函数迭代
次。我正在寻找Pillow替代方案,因为我想用Pillow替换我的整个脚本