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()

posted @ 2016-11-21 16:27  retacn_yue  阅读(176)  评论(0编辑  收藏  举报