【发布时间】:2017-03-19 23:34:09
【问题描述】:
我正在寻找一种极其有效和准确的方法来确定位图的平均 RGB 值。我目前有一种使用位锁的方法,它逐个像素地运行,并且在 30Hz 时占用了我大约 25% 的 CPU。
通过查看每三个像素,我已设法将其降低到约 15%,但我相信有更好的方法。我也尝试将计算转移到 GPU (Nvidia CUDA),但由于我在 GPU 编程方面缺乏经验,因此只需要更长时间。
我考虑过应用模糊之类的事情,但这不会减少像素数量,因此不会影响计算。
我想听听您对这个有趣话题的看法。
【问题讨论】:
-
你的问题太笼统了,而且含糊其辞。您说您尝试查看每 3 个像素,但这并没有平均像素值。构建一个使用该计算产生与真实平均值截然不同的平均值的图像是微不足道的。最终,您必须将每个值相加,然后除以总数。这就是平均值。使用 CUDA 可能会或可能不会改善事情;将字节移动到视频卡可能需要与扫描和添加 RAM 一样多的时间。
-
还请注意,CPU %age 不会告诉您任何有关效率的信息……它只是告诉您在算法运行时您正在使用的可用 CPU 的比例。使用 25% CPU 并耗时 10 秒的算法比使用 25% CPU 且仅耗时 5 秒的算法效率低。重要的是总计算时间。多线程代码可以通过使用更多 CPU 时间来提高吞吐量,但不一定被认为本身更高效。
-
如果每 3 个像素检查一次是可以接受的,是否也可以将其缩小到 5-10%?
标签: c# colors bitmap processing-efficiency