数字图像的运算
图像处理中最重要的内容之一就是图像的运算,图像像素的运算包括点运算、代数运算、逻辑运算,图像的几何变换方法包括平移、镜像、缩放、转置、旋转和剪切,图像的邻域操作和区域选择。
获取和修改
import cv2
import numpy as np
img = cv2.imread("test.jpg")
#可以通过像素点读取
px = img[100,100]
#返回的是一个RGB的三维向量
上面的例子是对一副输入图像的像素值进行读取,下面通过接口快速实现对像素值的修改
import cv2
import numpy as np
img = cv2.imread("test.jpg")
print(img.item(10,10,2))
img.itemset((10,10,2),100)
print(img.item(10,10,2))
当然经常需要访问图像的一些属性,包括行、列,大小,类型
import cv2
img = cv2.imread("test.jpg")
print(img.shape)
##(280,450,3)
print(img.size)
##12600
print(img.dtype)
##uint8
图像加法
cv2.add()是将两幅图像进行加法运算
图像混合
image.pngcv2.addWeighted()就是按照这个公式进行混合操作的,实现不同比例的一种图像混合。
import cv2
import numpy as np
img1 = cv2.imread("test1.jpg")
img2 = cv2.imread("test2.jpg")
dst = cv2.addWeighted(img1,0.7,img2,0.3,0)
cv2.imshow("dst",dst)
cv2.waitKey(0)
cv2.destroyAllWindow()
几何变换
扩展缩放
cv2.resize()可以实现这个功能
import numpy as np
import cv2
img = cv2.imread("test.jpg")
res = cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
cv2.imshow("res",res)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
平移
import cv2
import numpy as np
img = cv2.imread("test.jpg")
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
dst = np.zeros(imgInfo,np.uint8)
for i in range(height):
for j in range(width-100):
dst[i,j+100] = img[i,j]
cv2.imshow("dst",dst)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
image.png
原始图像向右移动100个像素
旋转
def rotation():
img = cv2.imread("test.jpg",0)
rows,cols = img.shape
#第一个是旋转中心,第二个是旋转角度,第三个是旋转缩放因子
M = cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)
dst = cv2.warpAffine(img,M,(2*cols,2*rows))
while(1):
cv2.imshow("dst",dst)
cv2.imshow("img",img)
if cv2.waitKey(1)&0xFF==27:
break
cv2.destroyAllWindows()
if __name__ == "__main__":
rotation()
仿射变换
def warpAffine():
img = cv2.imread("test.jpg")
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
#原图的三个坐标
matSrc = np.float32([[0,0],[0,height-1],[width-1,0]])
#仿射图的三个坐标
matDst = np.float32([[50,50],[100,height-50],[width-200,100]])
matAffine = cv2.getAffineTransform(matSrc,matDst)
dst = cv2.warpAffine(img,matAffine,(height,width))
cv2.imshow("dst",dst)
while(1):
if cv2.waitKey(1)&0xFF==27:
break
cv2.destroyAllWindows()
if __name__ == "__main__":
warpAffine()
网友评论