OpenCV编程任务与实现解析

45、编写一个程序,添加轨迹条滑块控件,让用户可以动态地将金字塔下采样缩减级别在2到8的因子范围内进行更改,无需将结果写入磁盘,但要显示结果。

需添加轨迹条滑块控件,实现动态调整金字塔下采样缩减级别在2到8之间,并显示结果。

46、紧凑矩阵和向量模板类型:a. 分别使用 cv::Mat<> 和 cv::Vec<> 模板创建一个 3×3 矩阵和一个 3 行向量。b. 能否直接将它们相乘?如果不能,原因是什么?c. 尝试使用 cv::Mat<> 模板将向量对象类型转换为 3×1 矩阵。现在会发生什么?

  • a. 使用相应模板可按其构造函数规则创建 3×3 矩阵和 3 行向量;
  • b. 通常不能直接相乘,因为矩阵乘法要求前一个矩阵的列数等于后一个矩阵的行数,3 行向量与 3×3 矩阵维度不匹配;
  • c. 将向量类型转换为 3×1 矩阵后,若满足矩阵乘法规则可进行相乘运算。

47、创建一个 ASCII 数字打字机,你可以在电脑中输入数字,这些数字将显示在一个高 20 像素、宽 10 像素的方块中。当你输入时,数字将从左到右显示,直到到达图像末尾,然后停止。

要实现这个功能,可使用 Python 和 OpenCV 库,以下是示例代码:

import cv2
import numpy as np

# 创建一个空白图像
image_height = 20
image_width = 10 * 10 # 假设最多显示 10 个数字
image = np.zeros((image_height, image_width), dtype=np.uint8)

# 初始化当前位置
current_x = 0

# 定义数字的 ASCII 字符集
numbers = '0123456789'

# 定义键盘事件处理函数
def on_key_press(key):
    global current_x
    if chr(key) in numbers and current_x < image_width - 10:
        # 获取数字字符
        digit = chr(key)
        # 创建一个小图像来绘制数字
        digit_image = np.zeros((20, 10), dtype=np.uint8)
        # 在小图像上绘制数字
        cv2.putText(digit_image, digit, (0, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.6, 255, 2)
        # 将小图像复制到主图像的当前位置
        image[:, current_x:current_x + 10] = digit_image
        # 更新当前位置
        current_x += 10

# 创建窗口并显示图像
cv2.namedWindow('ASCII Numeric Typewriter')

while True:
    cv2.imshow('ASCII Numeric Typewriter', image)
    key = cv2.waitKey(1) & 0xFF
    if key == 27: # 按 ESC 键退出
        break
    elif key >= 48 and key <= 57: # 处理数字键
        on_key_press(key)

# 关闭窗口
cv2.destroyAllWindows()

这段代码创建了一个空白图像,并允许用户通过键盘输入数字。数字将从左到右显示在图像中,直到达到图像的末尾。

48、对一张图像使用多个头文件。加载一张尺寸至少为100×100的图像。创建两个额外的感兴趣区域(ROI),其宽度为20,高度为30。它们的原点分别位于(5, 10)和(50, 60)。将这些新的图像子区域传递给cv::bitwise_not()函数。显示加载的图像,该图像应在较大的图像内有两个反转的矩形。

以下为实现该功能的大致步骤:

  1. 加载一张尺寸至少为100×100的图像;
  2. 创建两个宽度为20、高度为30,原点分别位于(5, 10)和(50, 60)的ROI;
  3. 将这两个ROI传递给 cv::bitwise_not() 函数进行反转操作;
  4. 显示加载的图像,此时图像内会有两个反转的矩形。

49、绘图实践:加载或创建并显示一幅彩色图像。绘制OpenCV能绘制的每种形状和线条的一个示例。

以下是一个使用OpenCV绘制各种形状和线条的Python示例代码:

import cv2
import numpy as np

# 创建一个空白的彩色图像
image = np.zeros((500, 500, 3), dtype=np.uint8)

# 绘制直线
cv2.line(image, (50, 50), (200, 50), (0, 255, 0), 2)

# 绘制矩形
cv2.rectangle(image, (250, 50), (400, 200), (0, 0, 255), 2)

# 绘制圆形
cv2.circle(image, (125, 250), 75, (255, 0, 0), 2)

# 绘制椭圆
cv2.ellipse(image
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值