[opencv][python] 学习手册1:练习代码1

[opencv][python] 学习手册1:练习代码1

01_读入一张图片.py
02_写入图片.py
03_理解像素.py
04_获取图片信息.py
05_图片剪切.py
06_图片翻转.py
07_手工实现放大缩小.py
08_resize放大缩小.py




01_读入一张图片.py

代码

import cv2 as cv
import numpy as np

"""
读取图片
IMREAD_UNCHANGED : 原样读取
IMREAD_COLOR : 以彩图的方式读取
IMREAD_GRAYSCALE : 以灰图方式读取
"""

# 1. 文件路径
img_path = r"../img/lena.jpg"

# 2. 读取图片
src = cv.imread(img_path, cv.IMREAD_COLOR)

# 3. 转化成灰度图
src_gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)

# 4. 创建窗口
cv.namedWindow("src", cv.WINDOW_AUTOSIZE)
cv.namedWindow("src_gray", cv.WINDOW_KEEPRATIO)

# 5. 显示图片,参数:1. 窗口名称,2. 图片对象,矩阵类型
cv.imshow("src", src)
cv.imshow("src_gray", src_gray)

# 6. 让程序保持执行状态:等待用户按键
key = cv.waitKey(0)
print("key = ", key)

运行结果
在这里插入图片描述


02_写入图片.py

代码

"""
需求:
1. 读取图片
2. 创建窗口 + 显示图片
3. 写入图片
4. 保持执行状态,等待按键

批量修改多行:shift + alt + mouse-left
"""

import cv2 as cv
import numpy as np

# 1. 读取图片
img_path = r"../img/lena.jpg"
src = cv.imread(img_path, cv.IMREAD_COLOR)

# 2. 创建窗口 + 显示图片
cv.namedWindow("src", cv.WINDOW_FREERATIO)
cv.imshow("src", src)

# 3. 写入图片
dst_path = r"../img/lena_copy.jpg"
cv.imwrite(dst_path, src)

# 4. 保持执行状态,等待按键
key = cv.waitKey(0)
print("key = ", key)

运行结果


03_理解像素.py

代码

"""
需求:
1. 创建空白画布
2. 循环为画布上色
3. 显示图像
4. 保持执行状态,等待按键
"""

import cv2 as cv
import numpy as np

# 1. 创建三通道空白画布,shape:row, col; uint8:0-255
img = np.zeros((400, 500, 3), np.uint8)

# 2. 循环为画布上色,画一条红色(bgr)直线
for col in range(500):
    img[200, col] = (0, 0, 255)

# 3. 显示图像
cv.imshow("img", img)

# 4. 保持执行状态,等待按键
key = cv.waitKey(0)
print("key = ", key)

运行结果
在这里插入图片描述


04_获取图片信息.py

代码

"""
需求:
1. 读取图片
2. 获取信息:shape,dtype
"""

import cv2 as cv
import numpy as np


# 1. 读取图片
filename = r"../img/yunduo.jpg"
src = cv.imread(filename, cv.IMREAD_COLOR)

# 2. 获取信息:shape,dtype
print("shape::{}, dtype::{}".format(src.shape, src.dtype))

运行结果

E:\Software\A_anaconda\envs\python3\python.exe E:/WorkSpace/WS_CV_2D/day01/04_获取图片信息.py
shape::(353, 493, 3), dtype::uint8

Process finished with exit code 0


05_图片剪切.py

代码

"""
需求:
1. 读取图片
2. 获取 ROI
3. 对 ROI 进行划线
4. 显示图像,等待按键
"""

import cv2 as cv
import numpy as np

# 1. 读取图片
filename = r"../img/yunduo.jpg"
src = cv.imread(filename, cv.IMREAD_COLOR)

# 2. 获取 ROI
roi = src[175:240, 180:300]
roi_h = roi.shape[0]
roi_w = roi.shape[1]

# 3. 对 ROI 进行划线
for col in range(roi_w):
    roi[int(roi_h / 2), col] = (0, 0, 255)

# 4. 显示图像,等待按键
cv.imshow("src", src)
cv.imshow("roi", roi)

key = cv.waitKey(0)
print("key = ", key)

运行结果
在这里插入图片描述


06_图片翻转.py

代码

"""
需求:
1. 读取图片
2. 显示图片
3. 创建一个原图两倍高的画布
4. 将图片的像素以倒影的方式显示在画布中
    1. 原图的 row_n 显示在 画布中 row_n
    2. 原图的 row_n 显示在 画布中 height - row_n + 1
    3. 每画一行刷新一次,显示画布
5. 显示画布,等待按键
"""

import cv2 as cv
import numpy as np

# 1. 读取图片
filename = r"../img/opencv-logo-white.png"
src = cv.imread(filename, cv.IMREAD_COLOR)

# 2. 显示图片
cv.imshow("src", src)
src_h = src.shape[0]
src_w = src.shape[1]

# 3. 创建一个原图两倍高的三通道画布
dst_h = src_h * 2
dst = np.zeros((dst_h, src_w, 3), np.uint8)

# 4. 将图片的像素以倒影的方式显示在画布中
for row in range(src_h):
    for col in range(src_w):
        # 1. 原图的 row_n 显示在 画布中 row_n
        dst[row, col] = src[row, col]
        # 2. 原图的 row_n 显示在 画布中 height - row_n + 1
        dst[dst_h - row - 1, col] = src[row, col]
    # 3. 每画一行刷新一次,显示画布
    cv.waitKey(50)
    cv.imshow("dst", dst)

# 5. 显示画布,等待按键
cv.imshow("dst", dst)

key = cv.waitKey(0)
print("key = ", key)

运行结果
在这里插入图片描述


07_手工实现放大缩小.py

代码

"""
需求:
使用最近邻域插值法,对图像进行缩放

1. 读取并获取图像信息
2. 定义缩放系数
3. 创建画布,根据缩放系数
4. 填充画布
    :old(row,col)- * - scale factor -> new(row,col)
    :old(row,col)<- scale factor -/- new(row,col)
5. 显示图像并等待按键
"""

import cv2 as cv
import numpy as np

# 1. 读取并获取图像信息
filename = r"../img/lena.jpg"
src = cv.imread(filename, cv.IMREAD_COLOR)
src_h = src.shape[0]
src_w = src.shape[1]

# 2. 定义缩放系数
scale_factor = 0.3
dst_h = int(src_h * scale_factor)
dst_w = int(src_w * scale_factor)

# 3. 创建三通道画布,根据缩放系数
dst = np.zeros((dst_h, dst_w, 3), np.uint8)

# 4. 填充画布
for row in range(dst_h):
    for col in range(dst_w):
        # :old(row,col)<- scale factor -/- new(row,col)
        src_row = int(row / scale_factor)
        src_col = int(col / scale_factor)
        # 赋值颜色
        dst[row, col] = src[src_row, src_col]

# 5. 显示图像并等待按键
cv.imshow("src", src)
cv.imshow("dst", dst)

key = cv.waitKey(0)
print("key = ", key)

运行结果
在这里插入图片描述


08_resize放大缩小.py

代码

"""
需求:
使用 resize api 对图像进行缩放

1. 读取图片,获取图像信息
2. 定义缩放因子
3. 调用 resize api 进行缩放
3. 显示图像,等待按键
"""

import cv2 as cv
import numpy as np

# 1. 读取图片,获取图像信息
filename = r"../img/lena.jpg"
src = cv.imread(filename, cv.IMREAD_COLOR)
src_h = src.shape[0]
src_w = src.shape[1]

# 2. 定义缩放因子
scale_factor = 0.5

# 3. 调用 resize api 进行缩放
dst = cv.resize(src, (int(src_h * scale_factor), int(src_w * scale_factor)))

# 3. 显示图像,等待按键
cv.imshow("src", src)
cv.imshow("dst", dst)

key = cv.waitKey(0)
print("key = ", key)

运行结果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值