我知道我可能在要求一个未完成版本的OpenCV做很多事情,但我遇到了一些奇怪的问题,而且似乎没有其他人遇到过。首先,我正在使用PyQt4,QThreads,Python 2.7和opencv在beaglebone黑色上编写一个多线程GUI应用程序。我的当前源代码可以在这里找到。我最初使用的是Debian存储库中的opencv版本,但它太过时了,没有我想要的一些功能,即simpleblobdetector类,并且非常缓慢。考虑到这一点,我从头编译了最新的opencv 3.0.0,自那以后它的表现就很奇怪。我最终将其缩小到与cvtColor有关的问题。然后我简化了代码,以确保不是其他原因导致问题。以下是我一直用于测试的代码:
import cv2
img = cv2.imread('images/original_image.png', cv2.IMREAD_COLOR)
rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
bgr_img = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2BGR)
cv2.imwrite("images/after_convert_to_rgb.png", rgb_img)
cv2.imwrite("images/after_convert_to_gray.png", gray_img)
cv2.imwrite("images/after_convert_back_to_bgr.png", bgr_img)
这段代码生成的图片可以在这里找到。
毫无疑问,我在这一点上感到困惑。我发现将图像转换为灰度时完美地工作,而其他两个则根本不起作用。我有几个与opencv合作的朋友检查了我的原始代码和这个测试代码,但没有发现任何问题。虽然不是作为此测试代码的一部分,但我确实尝试从各种来源读取不同文件格式和图像。它也会对来自VideoCapture类的opencv帧进行操作,因为那是我第一次看到这个问题并且我最终要做的事情。
因此,有人在opencv 3.0中见过这样的情况吗?我最好自定义编译opencv 2.4并使用它吗?我本来就会这样做,但我遵循的是专门为beaglebone黑色定制编译opencv的指南,它们都使用了最新的3.0,所以我认为没问题。无论如何,在我再次执行编译过程之前,我觉得值得检查一下,因为它常常需要我花费几天时间才能正确执行,而且会在夜间进行。
编辑: 以防其他人寻找并想知道我发现了什么。这绝对是我下载的opencv 3.0预发布版中的一个错误。我无法找到该版本的修复方法,并最终不得不降级到版本2.4.10。自从降级以来,一切都正常了。