# -*- coding: utf-8 -*-
"""
图像的基本操作
"""
import numpy as np
import cv2 as cv
#从文件读取图像
img = cv.imread('timg.jpg',1)
#可以根据像素的行和列的坐标获取他的像素值。对 BGR 图像而言,返回值为 B,G,R 的值。
img[100,100]
#array([255,209,88], dtype=uint8),行100列100的像素值,蓝色 255,绿色 209,红色 88
#单独将行100列100点的像素值,蓝色通道提取出来
blue = img[100,100,0]
#>>> blue
#255
#将行100列100点的像素值,绿色通道提取出来
green = img[100,100,1]
#>>> green
#209
#将行100列100点的像素值修改成白色255,255,255,。
img[100,100]=[255,255,255]
#获取行100列100点的像素值,B通道
img.item(100,100,0)
#255
#将行100列100点的像素值,B通道值改为100
img.itemset((100,100,0),100)
img.item(100,100,0)
#100
#获取图像基本属性
img.shape
#(360, 540, 3) 360行,540列,3个颜色通道
#获取图像像素数目
img.size
#583200 360*540*3=583200
'''
有时你需要对一幅图像的特定区域进行操作。例如我们要检测一副图像中眼睛的位置,我们首先应该在图像中找到脸,
再在脸的区域中找眼睛,而不是直接在一幅图像中搜索。这样会提高程序的准确性和性能。
ROI 也是使用 Numpy 索引来获得的。现在我们选择图像的部分并把他拷贝到图像的其他区域。'''
img=cv.imread('timg.jpg')
#取行100到250,列185到300的图像矩形像素
block=img[100:250,185:300]
#>>> block.shape 查看矩形像素基本属性
#(150, 115, 3)
#在左上角坐标185:100,右下角坐标300:250,画个线宽为2的绿色矩形框。
cv.rectangle(img,(185,100),(300,250),(0,255,0),2)
#把block覆盖到img图像上,位置行0-150,列0-115
img[0:150,0:115]=block
#显示图像窗口
cv.imshow('image',img)
cv.waitKey(10)
#销毁图像窗口
cv.destroyAllWindows()
'''拆分及合并图像通道'''
#将整个图片的BGR通道分离
b,g,r = cv.split(img) # 将图像的蓝、绿、红通道分离
#重新合成
img2=cv.merge([b,g,r])
#或者用切片的方式分离B通道
b=img[:,:,0]
#假如你想使所有像素的红色通道值都为 0,你不必先拆分再赋值。你可以直接使用 Numpy 索引,这会更快。
img[:,:,2]=0
OpenCV学习3-图像的基本操作
最新推荐文章于 2022-08-08 14:34:10 发布