记录学习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);两个图像的加权加法;
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()
相关文章推荐
- 记录学习python版的opencv(2)
- Java学习记录--OpenCV使用教程
- OpenCV官方文档学习记录(12)
- OpenCV官方文档学习记录(14)
- openCV学习记录:图像修复
- opencv学习记录(3)Mat - 基本图像容器
- OpenCV官方文档学习记录(10)
- OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别 标签: 脸部识别opencv 2017-07-03 21:38 26人阅读
- Opencv 学习记录
- ubuntu+opencv学习记录
- openCV学习记录:滤镜:霓虹&曝光
- Opencv学习记录之鼠标窗口响应
- OpenCV学习记录3//仿射变换与重映射
- OpenCV 学习记录2 图像简单处理及调用摄像头
- OpenCV官方文档学习记录(2)
- OpenCV学习记录
- OpenCV官方文档学习记录(11)
- Java学习记录--OpenCV使用教程
- OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别
- opencv 学习记录(1)Mat IpImage