Python cv2 (一) 基础 参数 详解

摘要 OpenCV 图像读取,cv2图像创建,cv2图像复制,cv2图像拼接,np.hstack子图列表,plt子图列表显示,cv2图像色彩模式转换,cv2图像通道拆分,cv2图像加法,cv2图像add和addWeighted,cv2图像不同尺寸重叠,cv2图像图像加logo,掩膜ROI,mask,cv2图像渐变动画,圆形遮罩,cv2图像写字画画,cv2图像处理视频

OpenCV应用领域

1、计算机视觉领域方向
1、人机互动
2、物体识别
3、图像分割
4、人脸识别
5、动作识别
6、运动跟踪
7、机器人
8、运动分析
9、机器视觉
10、结构分析
11、汽车安全驾驶
2、计算机操作底层技术

一 图像基本

1 模块

#--*coding:utf-8*--
import cv2#基本                      #opencv 读取的格式是BGR  非rgb
import matplotlib.pyplot as plt    #绘图展示
import numpy as np                  #基本计算

2 读取 创建

2.1 读取(cv2.imread)
图片=cv2.imread("a01.jpg")
灰度图片=cv2.imread("a01.jpg", cv2.IMREAD_GRAYSCALE)
2.2 创建 (np.zeros)

np.zeros() 等方法创建指定大小、类型的图像对象
np.ones_like(img1) * 255 创建和 img 一样大小的 白色图片

白色图片100*300 = np.ones((100, 300), dtype="float")
 # 1.14 Numpy 创建图像
    # 创建彩色图像(RGB)
    # (1) 通过宽度高度值创建多维数组
    width, height, channels = 400, 300, 3  # 行/高度, 列/宽度, 通道数
    imgEmpty = np.empty((400, 300, 3  ), np.uint8)  # 创建空白数组
    imgBlack = np.zeros((width, height, channels), np.uint8)  # 创建黑色图像 RGB=0
    imgWhite = np.ones((width, height, channels), np.uint8) * 255  # 创建白色图像 RGB=255
    # (2) 创建相同形状的多维数组
    img1 = cv2.imread("../images/imgLena.tif", flags=1)  # flags=1 读取彩色图像(BGR)
    imgBlackLike = np.zeros_like(img1)  # 创建与 img1 相同形状的黑色图像
    imgWhiteLike = np.ones_like(img1) * 255  # 创建与 img1 相同形状的白色图像
    # (3) 创建彩色随机图像 RGB=random
    import os
    randomByteArray = bytearray(os.urandom(width * height * channels))
    flatNumpyArray = np.array(randomByteArray)
    imgRGBRand = flatNumpyArray.reshape(width, height, channels)

    # (4) 创建灰度图像
    imgGrayWhite = np.ones((width, height), np.uint8) * 255  # 创建白色图像 Gray=255
    imgGrayBlack = np.zeros((width, height), np.uint8)  # 创建黑色图像 Gray=0
    imgGrayEye = np.eye(width)  # 创建对角线元素为1 的单位矩阵    
    randomByteArray = bytearray(os.urandom(width * height))
    flatNumpyArray = np.array(randomByteArray)
    imgGrayRand = flatNumpyArray.reshape(width, height)  # 创建灰度随机图像 Gray=random  
————————————————
版权声明:本文为CSDN博主「Python小白进阶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/youcans/article/details/121174586

3 复制 拼接

3.1复制(np.copy)
图片2=图片.copy()
3.2 拼接
retval = numpy.hstack((img1, img2, …)) # 水平拼接   高度(行)相同
retval = numpy.vstack((img1, img2, …)) # 垂直拼接  宽度(列)相同
  • 综合使用 np.hstack() 和 np.vstack() 函数,可以实现图像的矩阵拼接

4 关闭 保存

cv2.destroyAllWindows()
cv2.imwrite(“z图像保存.jpg”,img1)

5 显示

5.1 图片数据

print(“图片”,图片)
print(“图片”,图片[5,:,0]) #只显示 5行

5.2 图片信息 (宽\高和通道)

print(图片.shape,图片.size)

5.4 图片显示 /视频
  • cv2.imshow("",图片)

  • cv2.imshow(“影片”,cv2.cvtColor(cv2.read(影片)[1]))

          打开,帧=影片.read()
          cv2.imshow("影片",帧)
    

6 停止

6.4 停止图片

-cv2.waitKey(100)

6.5 停止 视频
  • cv2.waitKey(25)&0xFF==27: # 键盘ESC(27)退出, 否则等待25毫秒

7 列表

7.1 np.hstack

展示=np.hstack((图片,图片2)) # 同尺寸
cv2.imshow(“zhanshi”,展示))
cv2.waitKey(0)

7.2 plt
# 边界填充
#--*coding:utf-8*--
import cv2
import numpy as np

图片=cv2.imread("a01.jpg")

复制边缘=cv2.copyMakeBorder(图片,100,100,200,200,cv2.BORDER_REPLICATE)
# 可以先规定 上下左右
top,bottom,left,right=(100,100,200,200)
反射边缘=cv2.copyMakeBorder(图片,top,bottom,left,right,cv2.BORDER_REFLECT)
反射边缘_101=cv2.copyMakeBorder(图片,top,bottom,left,right,cv2.BORDER_REFLECT_101)
常量边缘=cv2.copyMakeBorder(图片,top,bottom,left,right,cv2.BORDER_CONSTANT,value=0)# 黑色 0
  • b调整 颜色 顺序 bgr → rgb
# 另一种显示方式  列表显示
import matplotlib.pyplot as plt
###  调整 颜色 顺序   bgr → rgb
def bgr2rgb(cv2_img):
    # 灰度图直接返回
    if len(cv2_img.shape)==2:return cv2_img
    # 三通道图
    elif len(cv2_img.shape)==3 and cv2_img.shape[2]==3:
        b,g,r,=cv2.split(cv2_img)
        return cv2.merge((r,g,b))
    # 三通道+明度
    elif len(cv2_img.shape)==3 and cv2_img.shape[2]==4:
        b,g,r,a=cv2.split(cv2_img)
        return cv2.merge((r,g,b,a))
    # 不明格式
    else:return cv2_img

	#   列表显示
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 显示汉字
plt.subplots(constrained_layout=True)  # 子图自适应行距 constrained 受约束的
plt.subplot(321),plt.imshow(bgr2rgb(图片),"gray"),plt.title("原图")
plt.subplot(323),plt.imshow(bgr2rgb(复制边缘),"gray"),plt.title("复制边缘")
plt.subplot(324),plt.imshow(bgr2rgb(反射边缘),"gray"),plt.title("反射边缘")
plt.subplot(325),plt.imshow(bgr2rgb(反射边缘_101),"gray"),plt.title("反射边缘_101")
plt.subplot(326),plt.imshow(bgr2rgb(常量边缘),"gray"),plt.title("常量边缘")

plt.show()

在这里插入图片描述

7.3 plt 列表骚操作
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 显示汉字
plt.subplots(constrained_layout=True)  # 子图自适应行距 constrained 受约束的
#  总3行, 本行3列 第二列
plt.subplot(332),plt.imshow(bgr2rgb(融合相加)),plt.title("融合相加")
#  总三行 本行2列 , 感觉应该是 4  5  但不行  只能 3  4
plt.subplot(323),plt.imshow(bgr2rgb(融合二值化_ROI)),plt.title("融合二值化_ROI")
plt.subplot(324),plt.imshow(bgr2rgb(融合二值化_反_原logo)),plt.title("融合二值化_反_原logo")
#  总 三行  本行4列  3*4  12  所以从  9-12,之所以用,隔开  是因为  10 11 12 两位数
plt.subplot(3,4,9),plt.imshow(bgr2rgb(ROI)),plt.title("ROI")
plt.subplot(3,4,10),plt.imshow(bgr2rgb(二值化_logo_mask),"gray"),plt.title("二值化")
plt.subplot(3,4,11),plt.imshow(bgr2rgb(logo_img)),plt.title("log原图")
plt.subplot(3,4,12),plt.imshow(bgr2rgb(二值化_logo_mask_反),"gray"),plt.title("二值化-反"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值