您的位置:首页 > 编程语言 > Python开发

记录学习python版的opencv(1)

2018-01-19 17:19 501 查看
第一部分:基础
1.1学习如下函数:cv2.imread(),cv2.imshow(),cv2.imwrite()。
cv2.waitKey(0)是等待多长时间后,获取一次键盘输入。
import numpy as np
import cv2
#img = cv2.imread('lena.jpg') #读取彩图
img = cv2.imread('lena.jpg',0) #读取灰图
cv2.imshow('img',img)
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('lena_gray.jpg',img)
    cv2.destroyAllWindows()1.2 pixel的值获取,替换。普通替换及array替换。image的属性获取
px = img[100,100]  # 坐标处的颜色
print(px)
px = img[100,100,0]  # 坐标处的blue色
print(px)

print(img.item(100,100,0)) #用numpy的array换坐标的pixel值
img.itemset((100,100,0),100)
print(img.item(100,100,0))

print(img.shape)  #图像属性
print(img.size)   # 图像像素 M*N*3
print(img.dtype) # 图像的数据类型

1.3 获取imge中子图像的pixels值copy_part = img[200:220,200:250] #复制一小部分图片[x1:x2,y1:y2]的值
img[100:120,100:150]=copy_part #在原图片坐标位置的像素进行赋值
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()1.4 两种方法分割RBG三层数据b,g,r=cv2.split(img) #Method 1 分割成三个图层
cv2.imshow("blue",b)
cv2.waitKey(0)
cv2.destroyAllWindows()

#Method 2 用numpy分割成三个图层,:cv2.split() 是一个比较耗时的操作。
#只有真正需要时才用它,能用 Numpy 索引就尽量用
# 创建3个跟图像一样大小的矩阵,数值全部为0
b = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)
g = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)
r = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)

#复制图像通道里的数据
b[:,:] = img[:,:,0] # 复制 b 通道的数据
g[:,:] = img[:,:,1] # 复制 g 通道的数据
r[:,:] = img[:,:,2] # 复制 r 通道的数据

img=cv2.merge([b,g,r]) #合并成一张彩色图
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()1.5 pixel的加法,注意pixel两种加法的区别。直接 x+y 与cv2.add(x,y);两个图像的加权加法;

x = np.uint8([250])   #cv2.add(img1,img2)
y = np.uint8([10])
print (cv2.add(x,y))   # 250+10 = 260 => 255 饱和算法
print (x+y)            # 250+10 = 260 % 256 = 4  取余

img1=cv2.imread('duibi2.jpg')    #必须大小相同   
img2=cv2.imread('duibi1.jpg')
dst=cv2.addWeighted(img1,0.7,img2,0.3,0)  #α·img1 + β ·img2 + γ
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindow()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv python