opencv_python学习笔记七
九 图像的基础操作
a获取像素值并修改
b获取图像的属性(信息)
c图像的ROI()
d图像通道的拆分和合并
1 获取并修改像素值
import cv2
import numpy as np
img=cv2.imread('test.jpg')
#取得像素
px=img[20,20]
print(px)
blue=img[20,20,0]
print(blue)
#显示结果如下
#[191 191 191]
#191
#修改像素
img[20,20]=[255,255,255]
print(img[20,20])
#更好的方法
print(img.item(10,10,2))
img.itemset((10,10,2),100)
print(img.item(10,10,2))
2 获取图像属性
print(img.shape)
#(220,#行数
265,#列数
3)#通道数
#取得图形的像素数
print(img.size)
#174900
#返回图像的数据类型
print(img.dtype)
#uint8
常用属性:
行
列
通道
图像数据类型
像素数目
3 图像的ROI
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2016/11/14 11:24
# @Author : Retacn
# @Site : 对一幅图像的特定区域进行操作,先择部分图像考贝到图像的其他区域
# @File : ROITest.py
# @Software: PyCharm
import cv2
import numpy as
np
img=cv2.imread("test.jpg")
ball=img[20:30,30:40]
img[200:210,100:110]=ball
#显示图像,窗口会自动调整为图像大小
cv2.imshow("DrawView",img)
#等待用户键入
k=cv2.waitKey(0)
#释放窗体
cv2.destroyAllWindows()
4 拆分及合并图像通道
把RGB拆分为单个通道
把独立通道的图片合并成一个RGB图像
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2016/11/14 11:43
# @Author : Retacn
# @Site : 图像的拆分和合并图像通道
# @File : viewMarge.py
# @Software: PyCharm
import cv2
import numpy as
np
img=cv2.imread('test.jpg')
b,g,r=cv2.split(img)
img=cv2.merge(b,g,r)
#b=img[:,:,0]
#img[:,:,2]
5 为图像扩边
cv2.copyMakeBorder()
def copyMakeBorder(src, #输入图像
top, #对应边界的像素数
bottom,
left,
right,
borderType,#要添加的边界类型
dst=None,
value=None)
cv2.BORDER_CONSTANT #添加有颜色的常数边界值
cv2.BORDER_REFLECT #边界元素的镜像
cv2.BORDER_REFLECT_101
cv2.BORDER_REPLICATE #重复最后一个元素
cv2.BORDER_WRAP
示例代码如下:#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2016/11/14 11:55
# @Author : Retacn
# @Site :
# @File : makeBorder.py
# @Software: PyCharm
import cv2
import numpy as
np
from matplotlib
import pyplot as
plt
BLUE=[255,0,0]
img1=cv2.imread("test.jpg")
replicate=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title("ORIGINAL")
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title("REPLICATE")
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title("REFLECT")
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title("REFLECT_101")
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title("WRAP")
plt.subplot(236),plt.imshow(constant,'gray'),plt.title("CONSTANT")
plt.show()