- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我意识到我可能对 opencv 的未完成版本提出了很多要求,但我在使用 cvtColor 方法时遇到了一些奇怪的问题,我无法找到其他人在其他地方拥有的任何其他引用资料。首先,作为一些序言,我在 beaglebone black 上使用 PyQt4、QThreads、Python 2.7 和 opencv 编写了一个多线程 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)
可以找到此代码生成的图像 HERE .
不用说,我现在被难住了。我发现特别奇怪的是,转换为灰色效果很好,而其他两个根本不起作用。我有几个使用 opencv 的 friend 检查了我的原始代码和这个测试代码,没有发现任何问题。此外,虽然不是此测试代码的一部分,但我确实尝试从各种来源读取不同的文件格式和图像。它还处理从 VideoCapture 类接收到的 opencv 帧,这也是我第一次看到问题的地方,也是我最终尝试做的事情。
那么之前有没有人在opencv 3.0中目睹过这样的事情?我最好只自定义编译 opencv 2.4 并改用它吗?我本来会这样做的,但我一直在遵循关于特别是为 beaglebone black 定制编译 opencv 的指南,他们都使用最新的 3.0,所以我认为它会很好。无论如何,我认为在我再次进行编译过程之前值得检查一下,因为它往往需要我几天的时间才能在一夜之间完成。
编辑:以防万一其他人去看并想知道我发现了什么。肯定是我下载的opencv 3.0 release candidate的bug。我找不到该版本的修复程序,最终不得不降级到 2.4.10 版。自降级以来,现在一切正常。
最佳答案
虽然它不是“OpenCV 解决方案”,但您可以使用纯 Python 重新排列颜色 channel ,因为 cv2 接口(interface)使用 numpy 数组进行数据存储:
rgb_img = bgr_img[:,:,::-1] #bgr --> rgb
bgr_img = rgb_img[:,:,::-1] #bgr --> rgb
关于python-2.7 - Python 2.7 和 Opencv 3.0.0 cvtColor 不适用于 BGR/RGB 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29615374/
我正在尝试使用 kmeans 聚类从图像中获取最常见的颜色。它可以很好地处理本地镜像,但会通过从 url 中提取图像的新功能返回此错误。这是抛出错误的行之前的代码: # import the nece
我想用 openCV 读取 YUV 视频。 YUV 视频为 1920*1080 并使用 YUV422 格式(我已经尝试使用 yuviewer 阅读此视频并且有效) 我正在使用带有 OpenCV 3.3
无法将视频媒体文件夹导入程序以转换为灰度。 这是我的代码 import cv2 import math import numpy as np cap=cv2.VideoCapture("C:/Use
我正在做一个项目,我需要改变图像的亮度和对比度,它是亮度而不是亮度。所以我一开始的代码是 for (int y = 0; y (y, x); // read pixel (0,0)
我将带有外部 dll 的相机帧加载到我的 OpenCV 程序中。我可以看到框架 cv::imshow("edges", frame); 一切正常。 frame.channels() 给了我 3 个 c
我正在尝试循环运行 cvtColor 命令。 vector RImages; vector hImages; for ( int idx = 0; idx RIma
我尝试根据本网站上的内容运行以下程序 http://www.lirtex.com/robotics/fast-object-tracking-robot-computer-vision/ 初始化参数
我将无符号的16位灰度tiff图像作为numpy数组。我想使用OpenCV对这些图像进行一些图像处理。我正在使用numpy将Mat数组转换为cv2.cvtColor(src, code)格式。就文档而
我一直在尝试进入 OpenCV。下面的代码似乎在 cvtColor 上崩溃了。 public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
我正在使用 cvtColor 将图像从 YUYV 格式转换为 RGB24。就颜色而言,输出很好,但图像的一半被剪切了。图像是 640x480 YUYV 图像缓冲区,没有任何标题。我正在使用以下代码:
我有一个函数可以获取图像,将其转换为 HSV,并将 V 设置为 100。但是,它似乎也修改了原始图像。 Mat hsvfilter(const Mat& img) { Mat result;
有没有办法在 OpenCV (>=2) 中转换图像而不必知道它们的源类型?我知道有 cvtColor,但是你必须指定转换代码,这总是需要我创建一个相应的开关 block ,这真的很乏味。如果像这样常见
我正在使用 openCV C++ API,我正在尝试将相机缓冲区 (YUV_NV12) 转换为 RGB 格式。但是,我的图像尺寸发生了变化(宽度从 720 缩小到 480)并且颜色不正确(有点紫色/绿
我正在尝试使用 cv::cvtColor 将 320x240 图像从 NV21 转换为 RGBA 图像,没有分配新内存。 所以我尝试了各种方法来实现这一目标。我知道 cv::cvtColor 调用 c
我在 Ubuntu 12.04 上使用 OpenCV2。我可以成功运行图像读取显示代码。但是我无法运行带有内置函数的代码,例如。 cvt颜色() #include #include #includ
OpenCV 中将图像从彩色转换为灰度时,使用什么转换算法?我试图在 GitHub 上的源代码中查找它,但没有任何成功。 亮度法平均最突出和最不突出的颜色: (max(R, G, B) + min
我有一种颜色要转换为不同的颜色空间。是否可以直接在 cv::Vec3f 上使用 cvtColor 而无需创建 1x1 cv::Mat 并用该像素填充它,使用cv::Mat 上的 cvtColor,然后
我正在使用以下代码将 RGB 格式图像转换为 YUVI420 格式图像,但结果 i420Mat 在颜色和大小上都是错误的。 cv::cvtColor(rgbMat, i420Mat, CV_RGB2Y
我正在尝试从连续的 IP 摄像机输入中检测颜色,但是 cvtColor 使代码非常慢。有没有一种方法可以直接从实时视频中检测颜色而无需将 RGB 转换为 HSV?这是我的代码- VideoCaptur
有没有其他人注意到MATLAB的 rgb2hsv() 和OpenCV的 cvtColor() (其参数为CV_BGR2HSV)的输出似乎在计算上略有不同? 例如,MATLAB的函数将输入的任何图像映射
我是一名优秀的程序员,十分优秀!