11.2 OpenCV 中的默认优化

问题描述:

import cv2
import numpy as np
# check if optimization is enabled
In [5]: cv2.useOptimized()
Out[5]: True
In [6]: %timeit res = cv2.medianBlur(img,49)
10 loops, best of 3: 34.9 ms per loop
# Disable it
In [7]: cv2.setUseOptimized(False)
In [8]: cv2.useOptimized()
Out[8]: False
In [9]: %timeit res = cv2.medianBlur(img,49)
10 loops, best of 3: 64.1 ms per loop

上面python代码不能在pycharm编辑器中运行,请修改代码,将代码转换为pycharm可以直接执行的代码?

这个代码片段看起来像是在 Jupyter Notebook 或 IPython 环境中运行的,因为它使用了 %timeit 这样的魔法命令(magic command),用于测量代码执行时间。它并不是一个标准的 Python 脚本,而是交互式环境中执行的代码片段。

可以将代码修改为一个完整的 Python 脚本,以便在 PyCharm 中直接运行。以下是修改后的代码:

import cv2
import numpy as np

# 读取图像
img = cv2.imread('roi.jpg')

# 检查是否启用优化
if cv2.useOptimized():
    print("优化已启用")
else:
    print("优化未启用")

# 使用优化执行中值滤波并测量时间
import time

start_time = time.time()
for _ in range(10):  # 进行10次测试
    res = cv2.medianBlur(img, 49)
end_time = time.time()
print(f"使用优化的耗时: {(end_time - start_time) * 1000 / 10:.2f} ms per loop")

# 禁用优化
cv2.setUseOptimized(False)

# 检查是否禁用优化
if not cv2.useOptimized():
    print("优化已禁用")

# 再次执行中值滤波并测量时间
start_time = time.time()
for _ in range(10):  # 进行10次测试
    res = cv2.medianBlur(img, 49)
end_time = time.time()
print(f"未使用优化的耗时: {(end_time - start_time) * 1000 / 10:.2f} ms per loop")

确保将 'roi.jpg' 替换为你的图像路径。这样修改后,代码就可以在 PyCharm 中直接运行了。

###########################################

上面代码为什么要乘以1000除以10呢?

在代码中乘以1000并除以10的目的是将执行时间转换为毫秒并计算平均值。具体来说:

  • 乘以1000:将时间从秒转换为毫秒(1秒 = 1000毫秒)。
  • 除以10:如果你是将操作重复10次以获取平均时间,那么除以10可以得到每次操作的平均时间。

这样可以更直观地看到每次操作的耗时,尤其在性能评估时更为实用。

###################################################

为什么核的尺寸越小比如,核的尺寸为3时,优化前后,两者差距很大。但是核的尺寸为49时,优化前后,两者的时间差距很小呢?

核的尺寸越小(例如3),每次处理的数据量相对较少,优化的算法可以显著提升性能,因为优化会减少算法的开销。而当核的尺寸较大(如49),每次处理的数据量增多,优化的效果可能会被处理数据本身的复杂性所抵消,因此前后的时间差距较小。简而言之,优化在处理小数据量时更能显现出优势,而大数据量的处理时间受到算法本身和数据量的影响更大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神笔馬良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值