Cor*_*ren 6 debian opencv python-2.7 beagleboneblack opencv3.0
所以我意识到我可能会对opencv的未完成版本提出很多要求,但我对cvtColor方法有一些奇怪的问题,我找不到任何其他人对其他地方的引用.首先,作为一些前置,我正在编写一个使用PyQt4,QThreads,Python 2.7和opencv在beaglebone black上的多线程gui应用程序.我目前的来源可以在github HERE上找到.我最初使用的是opencv的debian repo版本,但事实证明它已经过时了,它没有我正在寻找的一些功能,即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)
Run Code Online (Sandbox Code Playgroud)
可以在此处找到此代码生成的图像.
不用说,我在这一点上很难过.我发现特别奇怪的是,转换为灰色工作完美,而其他两个根本不起作用.我有几个与opencv一起工作的朋友检查我的原始代码和这个测试代码并且看不出它有什么问题.此外,虽然不是这个测试代码的一部分,但我确实尝试使用不同的文件格式和来自各种来源的图像.操作从VideoCapture类接收的opencv框架也是同样的事情,就像我第一次看到这个问题以及我最终想要做的那样.
那么有没有人在opencv 3.0之前见证过这样的事情?我最好自定义编译opencv 2.4并使用它吗?我本来可以做到这一点,但我特别关注自定义编译opencv的指南,特别是beaglebone black,他们都使用了最新的3.0,所以我觉得它没问题.无论如何,在我再次进行编译过程之前认为它值得检查,因为它往往需要花费几天的时间才能让它在一夜之间完成.
编辑:以防万一其他人去看,想知道我发现了什么.这绝对是我下载的opencv 3.0发布候选版中的一个错误.我无法找到该版本的修复程序,最终不得不降级到2.4.10版本.自降级以来,现在一切正常.
小智 3
虽然它不是“OpenCV 解决方案”,但您可以使用纯 python 重新排列颜色通道,因为 cv2 接口使用 numpy 数组进行数据存储:
rgb_img = bgr_img[:,:,::-1] #bgr --> rgb
bgr_img = rgb_img[:,:,::-1] #bgr --> rgb
Run Code Online (Sandbox Code Playgroud)