【问题标题】:resizeWindow not working for opencv 2.4.8 in osx 10.9resizeWindow 不适用于 osx 10.9 中的 opencv 2.4.8
【发布时间】:2014-03-16 17:26:48
【问题描述】:

我在 mac osx 10.9 中使用了一个简单的 c++ 程序,使用的是 opencv 2.4.8,它已经编译为 QT 支持和 OPENGL 支持。这是我用于构建 opencv 2.4.8 的 cmake 配置的相关部分

GUI: 
--     QT 4.x:                      YES (ver 4.8.6 EDITION = OpenSource)
--     QT OpenGL support:           YES (/usr/local/Cellar/qt/4.8.5/lib/QtOpenGL.framework)
--     OpenGL support:              YES (/System/Library/Frameworks/AGL.framework /System/Library/Frameworks/OpenGL.framework)

这是一个简单的 GUI 程序,

int main( int argc, char *argv[] ) {    namedWindow("my-win", WINDOW_OPENGL);
    int desiredWindowWidth = 800, desiredWindowHeight =600;
    resizeWindow("my-win", desiredWindowWidth, desiredWindowHeight);
    cv::VideoCapture capture(0);
    for(;;) {
        Mat view;
        if( capture.isOpened() )
        {
            capture >> view;
        }
        imshow("my-win", view);
        char key = (char)waitKey(30);
        if( key == 's') {
            unsigned char* pixels = new unsigned char [ 3 * desiredWindowWidth * desiredWindowHeight];
            glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
            glReadPixels(0, 0, desiredWindowWidth, desiredWindowHeight, GL_RGB, GL_UNSIGNED_BYTE, pixels);
            Mat savedImage(desiredWindowHeight, desiredWindowWidth, CV_8UC3, pixels);
            cv::flip(savedImage, savedImage, 0);
            imwrite("./foo.jpg", savedImage);
        }
    }
}

结果:我得到一个窗口,其中包含当前摄像机图像作为输出。到目前为止,一切都很好。 但是与我要求的(800 x 600)可能是400 x 300的窗口相比,我得到的窗口很小。此外,如果我给出任何其他比例窗口大小参数(例如:1200 x 900),我仍然会得到相同大小的窗口。看起来“resizeWindow”无法正常运行。

无法检查创建的窗口的大小。我所做的是将窗口另存为图像,我得到一个黑色的 800 x 600 图像,窗口内容作为 400x300 部分出现在一个角落。

【问题讨论】:

  • 那是视网膜显示器吗?可能与此有关。此外,您的配置同时提到了 Qt 4.8.5 和 Qt 4.8.6。这看起来很奇怪。

标签: c++ qt opengl opencv user-interface


【解决方案1】:

事实证明,我确实在使用 openGL 2.1,如下 glxinfo 输出所示。

    glxinfo | grep OpenGL
    OpenGL vendor string: Intel Inc.
    OpenGL renderer string: Intel Iris Pro OpenGL Engine
    OpenGL version string: 2.1 INTEL-8.20.26
    OpenGL shading language version string: 1.20
    OpenGL extensions:

我通过包含 glew 和 gflw3 重写了我的应用程序,并强制使用 3.2 版本的 OpenGL。 现在我可以控制窗口的大小了。

    int main(int argc, char **argv) {
        GLFWwindow* window;
        const GLubyte * strGLVersion;
        if (!glfwInit())
            exit(EXIT_FAILURE);

        //ask for OpenGL 3.2
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
        glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
        glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);


        window = glfwCreateWindow(800, 600, "check-opengl", NULL, NULL);
        if (!window) {
            glfwTerminate();
            exit(EXIT_FAILURE);
        }
        glfwMakeContextCurrent(window);

        //more accommodating glew
        glewExperimental = true;

        if(glewInit() != GLEW_OK) {
            glfwTerminate();
            exit(EXIT_FAILURE);
        }
        //v-sync off
        glfwSwapInterval(0);
        //print version
        strGLVersion = glGetString(GL_VERSION);
        cout << "GL_VERSION:" << strGLVersion << endl;
        const GLubyte * strGLShadingLanguageVersion = glGetString(GL_SHADING_LANGUAGE_VERSION);
        cout << "GL_VERSION:" << strGLShadingLanguageVersion << endl;

        VideoCapture cap(0);
        if(!cap.isOpened())  // check if we succeeded
            return -1;


        Mat image;
        cap >> image;
        const string win_name("kgeorge-ar");
        while (!glfwWindowShouldClose(window)) {

            cap >> image;

            //-----------8<------ snip -------8<------------
            //code for converting image to opengl texture
            //and rendering it to a quad is omited
            //-----------8<------ snip -------8<------------

            glfwSwapBuffers(window);
            glfwPollEvents();
        }

        glfwTerminate();
        exit(EXIT_SUCCESS);
        return 0;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 2014-08-27
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 2014-02-26
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多