相机中的 OpenCV 捕获会产生类似噪声的图像

标签 opencv image-processing cross-compiling image-capture v4l

我在嵌入式目标板上使用 OpenCV(FriendlyARM mini6410,处理器 arm 1176,运行 linux 内核 2.6.38)。 我使用为板提供的工具链编译了 OpenCV 2.4.4 库,在 ftp 中找到(请参阅 FriendlyARM 的 website)。我禁用了 GTK、ffmpeg 并启用了 v4l。库编译成功。

然后我写代码:

#include <opencv.hpp>
#include <highgui/highgui.hpp>
#include <imgproc/imgproc.hpp>
#include <iostream>
#include <stdio.h>

using namespace cv;
using namespace std;

int main()
{
    int i;
    cout << "initialise" << endl;
    IplImage* img=0;
    cout << "capturing ..." << endl;
    CvCapture* capture = cvCaptureFromCAM(2);
    cout << "get here" << endl;
    if(!capture){
        cout << "not capture" << endl;
        return -1;
    }
    cout << "captured" << endl;
    img=cvQueryFrame(capture);

   IplImage* img1 = cvCreateImage(cvGetSize(img),8,3);
   // cvCvtColor(img,img1,CV_RGB2GRAY);
   cvCopy(img, img1);
   cvSaveImage("cam_snap.jpg",img1);
   cvReleaseImage( &img1 );
   cvReleaseImage( &img );
   cvReleaseCapture( &capture );
   cout << "exit" << endl;

   return 0;
}

代码构建成功。我在连接到相机(PS3 眼睛)的目标板上运行 .elf 可执行文件,但生成的图像看起来像一台坏掉的电视(类似噪音):

noise like image

在我的主机中,生成的图像符合预期(相机前的场景)。您能否就哪里出了问题或我应该从哪里开始调试提供建议?

最佳答案

您应该检查您的深度和 channel 。这可能是一个对齐问题,而且要小心你的图像可能是 BGR 而不是 RGB。 你应该在 C++ 中使用 cv::Mat 而不是 IplImage 和 VideoCapture 而不是 CVCapture。

这段代码示例应该可以工作。 (未在与您相同的拱门上进行测试)

#include <opencv.hpp>
#include <highgui/highgui.hpp>
#include <imgproc/imgproc.hpp>
#include <iostream>
#include <stdio.h>

using namespace cv;
using namespace std;

int main()
{
    VideoCapture capture = cv::VideoCapture(0);
    cout << "get here" << endl;
    if(!capture.isOpened())  // check if we succeeded                                                                                                   
         return -1;

    cout << "captured" << endl;
    Mat img;
    capture >> img;
    imwrite("./test.png", img);
    capture.release();
    cout << "exit" << endl;
    return 0;
}

希望对您有所帮助。

关于相机中的 OpenCV 捕获会产生类似噪声的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16580633/

相关文章:

c++ - 如何使用 Qt SDK 为 Gentoo 64 位(Linux 内核 2.6)构建 native 应用程序?

python - 使用OpenCV退出代码-1073741819(0xC0000005)

java - Mat 到 MatOfPoint2f

matlab - 使用 matlab 识别实时视频源中的白框

Android Camera参数setPictureSize导致图片出现条纹

Django:使用 boto 将文件上传到 s3

c - 如何使用 arm-linux-gnueabihf-gcc 编译器交叉编译 libxml2。如何使用第三方库交叉编译?

linux - 是否可以在 Linux 上为其他平台创建二进制文件?

opencv - opencv-删除图像中的所有黄色

python - 如何缩小图像搜索范围以进行模板匹配?