【发布时间】:2015-04-27 14:30:28
【问题描述】:
我遇到了一个让我发疯的问题。
以下代码在 CV_BRG2GRAY 上产生分段错误
while (!glfwWindowShouldClose(window))
{
cap >> image_BGR;
cv::cvtColor(image_BGR, image_BGR, CV_BGR2GRAY);
display(window, image_BGR);
...
}
一些说明
- cap 是一个对象,它返回网络摄像头的 cv::Mat
- 我已尝试删除 cvtColor 行,它正在工作,我看到了网络摄像头流。但我想要一个灰度图像。
- 如果我将 CV_BGR2GRAY 替换为,例如CV_BGR2Luv,它有效。
- 我尝试使用 cv::COLOR_BGR2GRAY,但它不起作用。
【问题讨论】:
-
你可以尝试创建另一个垫子吗?
cap >> image_BGR; cv::Mat gray; cv::cvtColor(image_BGR, gray, CV_BGR2GRAY); display(window, gray); -
@Micka 不太确定,我正在使用给出的 makefile 进行编译。顺便说一句,您建议的代码出现以下错误:
libv4l2: error turning on stream: File too large VIDIOC_STREAMON: File too large Could not query frame. Trying to reinitialize. Segmentation fault -
您能否在 cv::cvtColor 之前
std::cout << image_BGR.size() << std::endl并调查崩溃的图像是否存在意外值?另外,能不能加上 cv:namedWindow("hello world"); cv::waitKey(0);在循环之前?如果链接到错误的库,highgui 经常会在标题中添加一些奇怪的窗口名称 :) -
尝试将
cap >> image_BGR;替换为image_BGR = imread("somefile");我怀疑不是颜色转换线导致问题。 -
@Micka Gosh,虽然文档没有明确说明,但我相信你是对的。我想知道为什么你提出的代码不适用于 OP...
标签: c++ opencv segmentation-fault