python openCV学习——基本的图像处理

图片读取
# cv2.imread(filename[, flags])
img = cv2.imread('D:/screenshot.png', flags = cv2.IMREAD_UNCHANGED)

cv2.IMREAD_UNCHANGED表示保留原图片格式。

如果是彩色图片,那么img是一个三维数组。或者说,是一个二维数组,数组中每个元素是一个表示RBGA的四元数组。

常用的flags还有灰度图像输出,cv2.IMREAD_GRAYSCALE。此时,img是一个真正的二维数组,数组的每个元素是一个表示当前像素点的灰度值。

我们可以通过numpy库打印img的维度信息

print(numpy.array(img).shape)
# 输出 (540,960,4)
# 刚好是我设置的手机的分辨率
显示图片
cv2.namedWindow('window_name')
cv2.imshow('window_name', mat)

# or

cv2.imshow('window_name',mat)

namedWindow()打开一个窗口,imshow()在打开的窗口中显示图片。mat表示要显示的图片。

:实际上测试的时候,这句代码是显示不出图片的。从StackOverFlow中找到原因:imshow()必须和cv2.waitKey()配合使用。

cv2.imshow('window_name',mat)
cv2.waitKey()

上面讲到的两种图片读取的格式显示效果分别如下:
在这里插入图片描述
在这里插入图片描述

保存图片
retval = cv2.imwrite(filename, img[, params]) # retval = True or False

我将用cv2.IMREAD_UNCHANGE格式读取的图片的所有像素的红色通道置零,并保存。图片如下:

在这里插入图片描述

通道分离

通道分离和cv2.inRange()结合可以精确提取图中的指定颜色。

下面实例将一张png读取成RGB,然后对三个通道分离成三张灰度图,将用cv2.inRange()对三个通道的值进行限制,输出三张二值化的图像。最后将三张图像取交集:

count = 0

def show_img(img):
	global count
	cv2.imshow('win'+str(count), img)
	count += 1
	cv2.waitKey()

def main():
	img_path = "./pictures/screenshot.png"
	img = cv2.imread(img_path)
	
	# 通道分离,注意顺序是 蓝,绿, 红
	b_img = img[:,:,0]
    g_img = img[:,:,1]
    r_img = img[:,:,2]
	
	# 选择范围
    r_dst = cv2.inRange(r_img, 90, 115)
    g_dst = cv2.inRange(g_img, 120, 135)
    b_dst = cv2.inRange(b_img, 75, 95)
	
    show_img(r_img)
    show_img(g_img)
    show_img(b_img)

    show_img(r_dst)
    show_img(g_dst)
    show_img(b_dst)

	# 取交集
    img_dir = np.multiply(np.multiply(r_dst, g_dst), b_dst)

    show_img(img_dir)

if __name__=="__main__":
	main()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值