opencv (1)

1、将图片灰度化,以及像素操作(将3通道的RGB图像,灰度化为单通道的灰度图像):

import cv2
import numpy as np
import matplotlib.pyplot as plt

img=cv2.imread('las.jpg') #读取图像,保存为矩阵形式
#cv2.imshow("RGB",img) #RGB为窗口名
print(img.shape) #shape,可以获取图片的属性

#cv2.waitKey(0)

width=img.shape[1] #列数,即宽度
height=img.shape[0] #行数,即高度

'''
  0-----------------------------> x
  |
  |
  |
  |
  |
  |
  y
  
'''
#必须将数组元素限定在uint8内,RGB图像的灰度级一般为256
news=np.zeros((height,width),np.uint8()) #uint8,2^8,取值为0-255

for h in range(height):
    for w in range(width):
        gray=0.3*img[h,w][0]+0.59*img[h,w][1]+0.11*img[h,w][2] #opencv读取图片,以BGR的形式存储
        news[h,w]=np.uint8(gray)
#cv2.imshow('gray',news)

cv2.imwrite('the gray one.jpg',news)

#将图片的某一区域的像素全部变成白色(255)
img[0:100,0:100,0:3]=[255,255,255] #不加0:3也行(左闭右开)
cv2.imshow('the white zone',img)

cv2.waitKey(0)
cv2.destroyAllWindows()

'''
plt.hist(img.ravel(),256)
plt.show()
'''

另外一种灰度化的方法,使用库函数cv2.COLOR_BGR2GRAY:

import cv2
import numpy as np

#使用cv2.COLOR_BGR2GRAY将图片灰度化(同样的,结果的图片也是单通道的)
img=cv2.imread('las.jpg')
img1=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('1',img1)

a=img1[50,50]
print(a) #a的值只有一个,说明使用cv2.COLOR_BGR2GRAY转换出来的图是单通道的

2、提取出感兴趣区域(简单的提取):

import cv2
import numpy as np

img1=cv2.imread('the gray one.jpg')
print(img1.size) #像素个数
print(img1.shape) #维度
print(img1.dtype) #图像类型,uint8

in_area=np.ones((100,100,3),np.uint8()) #zeros也可以

#print(help(np.ones)) #通过这个方式可以查看某个函数的官方文档解释

in_area=img1[300:400,300:400]
cv2.imshow('ins',in_area)  #提取出感兴趣区域

img1[0:100,0:100] = in_area
cv2.imshow('ronghe',img1) #与原图进行融合

3、通道变换1:
变换前:
在这里插入图片描述

import cv2
import numpy as np
#opencv读取RGB图片,用BGR的格式存储
img=cv2.imread('las.jpg')
cv2.imshow('test1',img)

b,g,r=cv2.split(img)
img1=cv2.merge([r,g,b]) #merge最多两个参数
cv2.imshow('test2',img1)

变换后:
在这里插入图片描述通道变换2:
原图:在这里插入图片描述

import cv2
import numpy as np
img=cv2.imread('las.jpg')
c,k,h=img.shape
b,g,r = cv2.split(img)

cv2.imshow('b',b)

img1=np.zeros((c,k,h),np.uint8())
img1[:,:,0]=b
cv2.imshow('bule',img1)

窗口b:
在这里插入图片描述窗口bule:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值