opencv-python图像处理教程_opencv-python图像处理基础(一)

本文详细介绍使用OpenCV进行图像和视频处理的方法,包括图像读取、灰度转换、颜色通道提取、边界填充等基本操作,同时展示了如何利用OpenCV进行摄像头数据捕获并进行实时灰度处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#一.读取图像数据

importcv2

img=cv2.imread("d:/image0.JPG") #读取图片数据

print(img)

cv2.imshow('image',img) #显示窗口数据

cv2.waitKey(0) #等待延迟

cv2.destroyAllWindows()

print(img) #打印像素值通道

从这个结果可以出:现在每个像素都由一个三元素组表示,并且每个整型(integer)向量

分别表示一个B,G,R通道。其他色彩空间(如hsv)也以同样地方式来表示像素,只是取值范围和通道数目不同

(例如,hsv)

print(img.shape)#打印通道

读取图像处理

cv2.IMREAD_COLOR:彩色图像

cv2.IMREAD_GRAYSCALE:灰度图像

灰度图像处理

importcv2 as cvimportnumpy as np

img1=cv.imread("d:/image0.JPG",cv.IMREAD_GRAYSCALE) #读取灰图片数据

print(img1)print(img1.shape)

cv.imshow('image',img1) #显示窗口数据

cv.waitKey(0) #等待延迟

cv.destroyAllWindows()

结果可以和色彩图像对比

二,数据读取-视频

cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。

如果是视频文件,直接指定好路径即可。

importcv2

vc=cv2.VideoCapture(0) #打开摄像头

if vc.isOpened(): #判断摄像头状态

open ,frame=vc.read()else:

open=Falsewhileopen:

ret,frame=vc.read() #frame帧率

if frame isNone:break

if ret==True:

gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #灰色处理

cv2.imshow("result",gray)

if cv2.waitKey(10)& 0xFF==27:

breakvc.release()

cv2.destroyAllWindows()

读取摄像头并且设置为灰色模式

剪切图像

importcv2

img=cv2.imread("d:/image0.JPG")

flower=img[0:200,0:200] #剪切图像

cv2.imshow('image',flower) #显示窗口数据

cv2.waitKey(0) #等待延迟

cv2.destroyAllWindows()

颜色通道地提取只保留b通道

importcv2

img=cv2.imread("d:/image0.JPG")

b,g,r=cv2.split(img)print(b)#只保留b结果

cur_img=img.copy()

cur_img[:,:,0]=0

cur_img[:,:,1]=0

cv2.imshow('image',cur_img) #显示窗口数据

cv2.waitKey(0) #等待延迟

cv2.destroyAllWindows()

颜色通道地提取只保留g通道

importcv2

img=cv2.imread("d:/image0.JPG")

b,g,r=cv2.split(img)print(b)#只保留b结果

cur_img=img.copy()

cur_img[:,:,0]=0

cur_img[:,:,2]=0

cv2.imshow('image',cur_img) #显示窗口数据

cv2.waitKey(0) #等待延迟

cv2.destroyAllWindows()

颜色通道地提取只保留r通道

importcv2

img=cv2.imread("d:/image0.JPG")

b,g,r=cv2.split(img)print(b)#只保留b结果

cur_img=img.copy()

cur_img[:,:,1]=0

cur_img[:,:,2]=0

cv2.imshow('image',cur_img) #显示窗口数据

cv2.waitKey(0) #等待延迟

cv2.destroyAllWindows()

边界填充

BORDER_REPLICATE:复制法,也就是复制最边缘像素。

BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb

BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba

BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg

BORDER_CONSTANT:常量法,常数值填充。

importcv2importmatplotlib.pyplot as plt

img=cv2.imread("d:/cat.JPG")

top_size,bottom_size,left_size,right_size= (50,50,50,50)

replicate= cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)

reflect=cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)

reflect101=cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)

wrap=cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)

constant= cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)

plt.subplot(231), plt.imshow(img, '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()

数值计算

import cv2

img=cv2.imread("d:/image0.JPG")

img_flower=img+10 #所有通道数值+10

print(img[:5,:,0])

print(".........................")

print(img_flower[:5,:,0])

当数值超过256时会以%256地形式展示通道数据

print(".........................")

print((img_flower+img)[:5,:,0])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值