OpenCV中的图像插值示例

本文地址:http://www.cnblogs.com/QingHuan/p/7384433.html,转载请注明出处

===============================================================

 

图像插值的用处是把图像中的“划痕”等通过插值的方式去除掉,

英文对应的是:image inpainting,可以通过英文检索相关论文,比如
《High-Resolution Image Inpainting using Multi-Scale Neural Patch Synthesis》

 

 

1. 第一个例子:

这里结合 http://docs.opencv.org/trunk/df/d3d/tutorial_py_inpainting.html 然后略作修改,给出了第一个例子

 

首先给出代码:

import numpy as np
import cv2

img = cv2.imread('messi.png')
mask = cv2.imread('mask.png',0)

img = cv2.resize(img, (846, 634))
mask = cv2.resize(mask, (846, 634))

dst = cv2.inpaint(img,mask,3,cv2.INPAINT_TELEA)

cv2.imwrite("messi_result.png", dst)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

这里做了Resize,把两幅图片的尺寸调成一样的了,因为图片是手动的截图

下面是损坏后的图片,MASK和修复后的图片:

 

 

关于resize的补充阅读:http://blog.csdn.net/ikerpeng/article/details/17239809

 

2. 第二个例子:

这里是两张图片,一张是小男孩的图片,一张是通过姿态识别标注后的小男孩图片:

这两张分别是 boy_t.png 和 boy.jpg

 

那么如何通过算法来找出他们的差异呢?找到的差异可否当作第一个例子中的 MASK 来使用呢?

答案是可以的:

 

效果如图:

 

四张图从左到右分别是姿态识别标注后的图、原图、根据MASK插值后的图、MASK(也就是前两张的差异)

 

下面是代码:

import numpy as np
import cv2

mask = cv2.imread('boy.jpg')
img = cv2.imread('boy_t.png')

img = cv2.resize(img, (280, 500))
mask = cv2.resize(mask, (280, 500))

cv2.imshow('origin', mask)
mask = cv2.subtract(img, mask)
mask = cv2.cvtColor(mask, cv2.COLOR_RGB2GRAY)

cv2.imshow('img', img)
cv2.imshow('mask', mask)

dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)

# cv2.imwrite("messi_result.png", dst)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

posted on 2017-08-17 21:17  Oliver-cs  阅读(2339)  评论(0编辑  收藏  举报

导航