opencv学习 - 图像基本操作

数据读取-两个重要属性

学习环境:jupyter notebook
(1)cv2.IMREAD_COLOR;彩色图像
(2)cv2.IMREAD_GRAYSCALE;灰度图像
读取图片:

import cv2 # opencv读取的格式是BGR
img = cv2.imread('path')
cv2.imshow('image', img) # 显示图片
cv2.watiKey(0) # 等待时间 毫秒级 0表示任意键终止

使用上面两个重要属性:

import cv2 
img = cv2.imread('path', cv2.IMREAD_GRAYSCALE) # 以灰度图的形式读取图像
img.shape # 可以用来查看图片的形状
img.size # 查看大小
type(img) # 查看类型

定义一个专门用于图像显示的函数:

def cv_show(name, img):
	cv2.imshow(name, img)
	cv2.waitKey(0)
	cv2.destoryAllWindows()

保存图片:

cv2.imwrite("name", img)

读取视频:
cv2.VideoCapture可以用来捕捉摄像头, 用数字来控制不同的设备, 例如0,1
如果是视频文件, 直接指定号路径即可。

import cv2
vc = cv2.VideoCapture("文件路径")
#检查是否打开
if vc.isOpened():
	op, frame = vc.read()
else:
	op = False
while op:
	ret, frame = vc.read()
	if frame is None:
		break
	if ret == True:
		gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将bgr转为灰度图
		cv2.imshow('result', gray)
		if cv2.waitKey(10) & 0xFF == 27:
			break
vc.release()

截取图像:

img = cv2.imread('cat.jpg')
cat = img[0:200, 0:200]
cv_show('cat', cat) # 自己定义的显示函数

颜色通道提取:

b, g, r = cv2.split(img) # 此方法即可分离通道
img = cv2.merge((b, g, r)) # 合并通道
# 只保留R通道
cur_img = img.copy() # 将图像复制一份
cur_img[:,:,0] = 0
cur_img[:,:,1] = 0
cv_show('R', cur_img)

边界填充:
BORDER_REPLICATE:复制法,也就是复制最边缘像素。
BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如: fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法,常数值填充。

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,borderType=cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,top_size, bottom_size, left_size, right_size,borderType=cv2.BORDER_REFLECT_101)
wrap= cv2.copyMakeBorder(img,top_size, bottom_size, left_size, right_size,borderType=cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img,top_size, bottom_size, left_size, right_size,borderType=cv2.BORDER_CONSTANT)

# 采用matplotlib进行显示
import matplotlib.pyplot as plt
plt.subplot(231),plt.imshow(img,"gray"),plt.title("ORIGINAL")
plt.subplot(232),plt.imshow(replicate,"gray"),plt.title("ORIGINAL")
plt.subplot(233),plt.imshow(reflect,"gray"),plt.title("ORIGINAL")
plt.subplot(234),plt.imshow(reflect101,"gray"),plt.title("ORIGINAL")
plt.subplot(235),plt.imshow(wrap,"gray"),plt.title("ORIGINAL")
plt.subplot(236),plt.imshow(constant,"gray"),plt.title("ORIGINAL")
plt.show()

在这里插入图片描述
图像融合:

img_cat = cv2.imread('cat.jpg)
img_dog = cv2.imread('dog.jpg)
img_cat = cv2.resize(img_cat, (500, 414)) # 改变图像的大小
# resize还有其他用法
# cv2.resize(img_cat, (0,0), fx=3, fy=1) # 设置宽高的比例
img_dog = cv2.resize(img_dog, (500, 414))
res = cv2.addWeighted(img_cat, 0.6, img_dog, 0.4, 0)
plt.show() 

在这里插入图片描述

发布了1 篇原创文章 · 获赞 0 · 访问量 18
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览