opencv-python图像处理基础(一)
2024-09-06 08:32:15
#一.读取图像数据
import cv2 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:灰度图像
灰度图像处理
import cv2 as cv
import numpy 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。
如果是视频文件,直接指定好路径即可。
import cv2
vc=cv2.VideoCapture(0) #打开摄像头
if vc.isOpened(): #判断摄像头状态
open ,frame=vc.read()
else:
open=False
while open:
ret,frame=vc.read() #frame帧率
if frame is None:
break
if ret==True:
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #灰色处理
cv2.imshow("result",gray)
if cv2.waitKey(10)& 0xFF==27:
break vc.release()
cv2.destroyAllWindows()
读取摄像头并且设置为灰色模式
剪切图像
import cv2
img=cv2.imread("d:/image0.JPG")
flower=img[0:200,0:200] #剪切图像
cv2.imshow('image',flower) #显示窗口数据
cv2.waitKey(0) #等待延迟
cv2.destroyAllWindows()
颜色通道地提取只保留r通道
import cv2
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通道
import cv2
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()
颜色通道地提取只保留b通道
import cv2
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:常量法,常数值填充。
import cv2
import matplotlib.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])
最新文章
- 当父级是body时,子元素设置position:absolute;定位是根据body还是html呢?
- Tiny6410 LCD设置
- php编码规范
- JQuery------动态添加的元素on方法不起作用解决方法
- 解决JS浮点数(小数)计算加减乘除的BUG
- ASP.NET MVC 4 RC的JS/CSS打包压缩功能 Scripts.Render和Styles.Render
- UserDefault的使用,保存小数据到本地-iOS
- C#分布式缓存Couchbase
- python手动设置递归调用深度
- VS 和 VAssistX 常用快捷键
- netcore 下加密遇到的问题
- windows socket 文件下载上传
- a标签实现锚点功能
- 【blog】Hibernate5如何设置SQLite的方言(待更新...)
- windows安装channels报错的解决方案
- LVS + Keepalived 理论
- 天梯赛训练2 7-8 矩阵A乘以B
- Apache poi简介及代码操作Excel
- SCU 4438:Censor
- Hibernate 、 Axis2发布
热门文章
- 用百度大脑技术让AI做回新闻主播!
- 相机位姿求解——P3P问题
- mac-安装sshpass
- laravel身份验证-Auth的使用
- Cordova搭建,所遇到问题处理
- 在Mac上安装JDK1.8及环境变量配置
- 阿里巴巴 Kubernetes 能力再获 CNCF 认可 | 云原生生态周报 Vol. 32
- 【原创】flash中DataGrid数据列显示顺序的解决办法(非数据排序)
- java 整合redis缓存 SSM 后台框架 rest接口 shiro druid maven bootstrap html5
- forEach和map的区别,简单写了IE低版本的原形封装