0

如果理解某些编码我会遇到麻烦我很抱歉如果这很愚蠢但是我有一个代码可以从我的网络摄像头捕获视频我想从帧中获取 RGB 值如果这是不可能的将不得不保存一个框架作为图片,然后从中获取值?

const char window_name[]="网络摄像头";

int main(int argc, char* argv[]) {

/* attempt to capture from any connected device */
CvCapture *capture=cvCaptureFromCAM(CV_CAP_ANY);
if(!capture)
{
    printf("Failed to initialise webcam\n");
    return -1;
}

/* create the output window */
cvNamedWindow(window_name, CV_WINDOW_NORMAL);

do
{
    /* attempt to grab a frame */

    IplImage *frame=cvQueryFrame(capture);
    if(!frame)
    {
        printf("Failed to get frame\n");
        break;
    }


    COLORREF myColAbsolute = GetPixel(frame, 10,10);//error in saying frame is not compatible with HDC.

    cout << "Red - " << (int)GetRValue(myColAbsolute) << endl;
    cout << "Green - " << (int)GetGValue(myColAbsolute) << endl;
    cout << "Blue - " << (int)GetBValue(myColAbsolute) << endl;


    /* show the frame */
    cvShowImage(window_name, frame);
4

1 回答 1

1

哈 !(显然被复制和粘贴的无赖抓住了)

GetPixel() 是一个 windows 函数,而不是 opencv 函数。GetRValue() 和姐妹们一样。

您可以在本机 win32 api 中使用它们来从 HDC 获取像素,但它不适用于 opencv/highgui,因为 HDC 和 HWND 都没有暴露。

既然你显然是一个初学者(这没什么错,再次!)让我试着说服你不要使用旧的 1.0 opencv api(IplImages, cv*Functions),你应该使用新的(cv ::Mat,命名空间 cv::Functions) 代替。

#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace cv;
using namespace std;

int main()
{
    Mat frame;
    namedWindow("video", 1);

    VideoCapture cap(0);
    while ( cap.isOpened() )
    {
        cap >> frame;
        if(frame.empty()) break;

                int x=3, y=5;
                // Ladies and Gentlemen, the PIXEL!
                Vec3b pixel = frame.at<Vec3b>(y,x); // row,col, not x,y!
                cerr << "b:" << int(pixel[0]) << " g:" << int(pixel[1]) << " r:" << int(pixel[2]) << endl;

        imshow("video", frame);
        if(waitKey(30) >= 0) break;
    }   
    return 0;
}
于 2013-03-13T19:32:21.350 回答