opencv学习笔记(五)感兴趣区域、通道拆分

一、获取图像,将感兴趣区域显示出来:

#获取图像脸部信息,并显示
import cv2
img = cv2.imread('xiao.png',cv2.IMREAD_UNCHANGED)
face = img[50:565,80:600]  #[a:b,c:d] a行到b行,c列到d列的区域
cv2.imshow('original',img)
cv2.imshow('face',face)
cv2.waitKey()
cv2.destroyAllWindows()

 运行结果:

 二、在图像中将感兴趣区域ROI进行打码:

import cv2
import numpy as np
img = cv2.imread('xiao.png',cv2.IMREAD_UNCHANGED)
cv2.imshow('oringinal',img)
face = np.random.randint(0,255,(515,520,3)) #此处出错!!!
img[50:565,80:600] = face
cv2.imshow('result',img)
cv2.waitKey()
cv2.destroyAllWindows()

报错:

改正:

import cv2
import numpy as np
img = cv2.imread('xiao.png',cv2.IMREAD_UNCHANGED)
cv2.imshow('oringinal',img)
face = np.random.randint(0,255,(515,389,3))
img[50:565,80:600] = face
cv2.imshow('result',img)
cv2.waitKey()
cv2.destroyAllWindows()

 运行:

此处存在疑问:

1.为什么把(515,389,3)换成size=[515,389]不行呢?

2.为什么是389而不是520?

import cv2
import numpy as np
img = cv2.imread('xiao.png',cv2.IMREAD_UNCHANGED)
cv2.imshow('oringinal',img)
face = np.random.randint(0,255,size=(515,520))
img[50:565,80:600] = face
cv2.imshow('result',img)
cv2.waitKey()
cv2.destroyAllWindows()

运行报错:

问了师兄后,解决问题2:先看一下图像的大小  print(img.shape)

import cv2
img = cv2.imread('huajiu.jpg')
print(img.shape)
cv2.imshow('oringinal',img)
b = img[50:100,50:150]
img[0:50,0:100] = b
cv2.imshow('result',img)
cv2.waitKey()
cv2.destroyAllWindows()

三、将一图像的感兴趣区域复制到另一图像上去:

import cv2
q = cv2.imread("qiusuoxi2.jpg",cv2.IMREAD_UNCHANGED)
x = cv2.imread("xiao.png", cv2.IMREAD_UNCHANGED)
cv2.imshow("q",q)
cv2.imshow("x", x)
face = q[220:400,250:350]
x[160:340,200:300] = face
cv2.imshow("result", x)
cv2.waitKey()
cv2.destroyAllWindows()

原来是图图片大小根本不够哈哈哈

改正后运行结果:

四、通道拆分两种方法:分为1.索引拆分和2.函数拆分

1.索引拆分

#img索引,以下语句用于提取a行到b行,c列到d列的三通道的像素值
b = img[a:b,c:,0]  #b通道
g = img[a:b,c:,1]  #g通道
r = img[a:b,c:,2]  #r通道
import cv2
xiao = cv2.imread('xiao.png') #读取图像
cv2.imshow('lesson1',xiao)    #显示原始图像
b = xiao[:,:,0]   #将原始图像的b通道的像素值赋予b
g = xiao[:,:,1]   #将原始图像的g通道的像素值赋予g
r = xiao[:,:,2]   #将原始图像的r通道的像素值赋予r
cv2.imshow("b",b) #将图像b在b窗口展示出来
cv2.imshow('g',g) #将图像g在g窗口展示出来
cv2.imshow('r',r) #将图像r在r窗口展示出来
#------更改像素值------
xiao[:,:,0] = 0   #将原始图像的b通道的值改为0
cv2.imshow('xiaob0=0',xiao)  #将更改后的图像显示在xiaob=0的窗口中
xiao[:,:,1] = 0   #将原始图像的g通道的值改为0
cv2.imshow('xiaog1=0',xiao)
xiao[:,:,2] = 0   #将原始图像的r通道的值改为0
cv2.imshow('xiaor2=0',xiao)
cv2.waitKey()
cv2.destroyAllWindows()

运行:

2.函数拆分:

b,g,r = cv2.split(img)
#---上下等价---
b = cv2.split(img)[0]
g = cv2.split(img)[1]
r = cv2.split(img)[2]
import cv2
xiao = cv2.imread('xiao.png') #读取图像
b,g,r = cv2.split(xiao)       #拆分bgr通道
#---分别显示每个通道的图像
cv2.imshow('b',b)
cv2.imshow('g',g)
cv2.imshow('r',r)
cv2.waitKey()
cv2.destroyAllWindows()

或者:

import cv2
xiao = cv2.imread('xiao.png') #读取图像
#---拆分bgr通道---
b = cv2.split(xiao)[0]
g = cv2.split(xiao)[1]
r = cv2.split(xiao)[2]
#---分别显示每个通道的图像---
cv2.imshow('b',b)
cv2.imshow('g',g)
cv2.imshow('r',r)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值