python - 阈值图像数组和渲染的有效方法 - Python/NumPy/OpenCV

标签 python arrays performance loops numpy

我有一台相机正在将图像数据发送到我的计算机。从那里我的 python 脚本将 8 位颜色信息(黑色和白色;范围从 0 - 黑色 - 到 255 - 白色)放入 numpy 数组中。该数组是二维的,第一维最多 384,第二维最多 288 使用 openCV 窗口显示此效果非常好,并且实时视频超过 24fps。

我现在的目标是操纵图像,以便实时视频将任何低于 200 的颜色值显示为 0(全黑),将任何高于 200 的颜色值显示为 255(全白)。然而,我的代码现在只给我大约 3fps。

我的代码正在执行以下操作:

  • 将来自相机的图像保存在 numpy 数组中
  • 打开第一个 for 循环以迭代 x 值
  • 在第一个 for 循环中使用 y 值迭代第二个 for 循环
  • 检查每个像素的每个颜色值,并检查它是否高于 200
  • 根据 if 子句将颜色值设置为 0 或 255
  • 显示新图像

这是代码中的决定性部分:

processedImage = frame
i = 0
for i in range(0, displayedWidth):
    ii = 0
    for ii in range(0, displayedHeight):
        if frame[ii, i] > 200:
            processedImage[ii, i] = 255
        else: 
            processedImage[ii, i] = 0
cv2.imshow("LiveVideo", processedImage)

我读到here for 循环比 while 循环更快,但它并没有显着提高代码的速度,这就是为什么我假设重写 processedImage 时间太长。

有没有办法让整个过程更快?

感谢您的回答!

最佳答案

试试这个:

frame[frame > 200] = 255
frame[frame <= 200] = 0
cv2.imshow("LiveVideo", frame)

关于python - 阈值图像数组和渲染的有效方法 - Python/NumPy/OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59072302/

相关文章:

sql - 使用索引优化SQLite3上的SQL查询

performance - "for"循环在Matlab和Octave中的时间对比

javascript - 事件监听器效率

python - 如何使用 Librosa 在 python 中读取音频?

javascript - 如何在不同事件中将多个数据字符串添加到相同类型的数组到本地存储

c++ - 两个相同大小(和长度)的数组是否具有相同的元素偏移量?

python - 在python中组织点数组

python - 替换 Pandas 中的 NaN 值

python - 如何合并 Pandas 中的列?

python - 下载 bzr 分支时权限被拒绝(公钥)