python练习 双线性插值对图像进行伸缩变换
2014-04-10 17:40
561 查看
import numpy as np import cv2 ##双线性插值 def resize(src,dstsize):#输入src 和size if src.ndim==3: dstsize.append(3) dst=np.array(np.zeros(dstsize),src.dtype) factory=float(np.size(src,0))/dstsize[0] factorx=float(np.size(src,1))/dstsize[1] print 'factory',factory,'factorx',factorx srcheight=np.size(src,0) srcwidth=np.size(src,1) print 'srcwidth',srcwidth,'srcheight',srcheight for i in range(dstsize[0]): for j in range(dstsize[1]): y=float(i)*factory x=float(j)*factorx if y+1>srcheight: #越界判断 y-=1 if x+1>srcwidth: x-=1 cy=np.ceil(y) fy=cy-1 cx=np.ceil(x) fx=cx-1 w1=(cx-x)*(cy-y) w2=(x-fx)*(cy-y) w3=(cx-x)*(y-fy) w4=(x-fx)*(y-fy) if (x-np.floor(x)>1e-6 or y-np.floor(y)>1e-6): t=src[fy,fx]*w1+src[fy,cx]*w2+src[cy,fx]*w3+src[cy,cx]*w4 t=np.ubyte(np.floor(t)) dst[i,j]=t #print t else: #映射到原图像刚好是整数的坐标 dst[i,j]=(src[y,x]) # print src[i,j] return dst def test1(): img=cv2.imread('cat.jpg',1) print np.size(img,0) dst=resize(img,[100,100]) cv2.imshow('dst',dst) cv2.imshow('src',img) cv2.waitKey() cv2.destroyAllWindows() if __name__=='__main__': test1()
相关文章推荐
- 5 用python进行OpenCV实战之图像变换2(旋转)
- 4 用python进行OpenCV实战之图像变换1(平移)
- 5 用python进行OpenCV实战之图像变换2(旋转)
- 4 用python进行OpenCV实战之图像变换1(平移)
- python基础练习--对10个数进行排序
- python之安装networkx,matlpot包进行图像处理
- MATLAB图像处理_直接操作像素点进行颜色变换
- 【python下使用OpenCV实现计算机视觉读书笔记2】图像与字节的变换
- Python图像灰度变换及图像数组操作
- python 笔记 继续进行输出练习,并进行格式化定义打印 ——12.23
- 用Python进行图像处理
- 使用CloudSight API进行图像识别的Python脚本
- python项目练习八:使用XML-RPC进行远程文件共享
- python自动截取需要区域,进行图像识别的方法
- python对图像中的人脸进行画框(人脸的位置数据记录在记事本文件中)
- 安装Python图像处理库PIL、pytesseract进行验证码识别
- python opencv对图像进行旋转且不裁剪图片的方法
- Python与图像处理(2):灰度变换,直方图均衡化
- 图像通道变换python-opencv
- 使用python进行图像处理-调整图片大小