diff --git a/samples/cpp/BLOB_MSER.cpp b/samples/cpp/BLOB_MSER.cpp index 69446c669..37c00237d 100644 --- a/samples/cpp/BLOB_MSER.cpp +++ b/samples/cpp/BLOB_MSER.cpp @@ -1,11 +1,30 @@ #include +#include "opencv2/core/opengl.hpp" + #include #include #include +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN 1 +#define NOMINMAX 1 +#include +#endif +#if defined(_WIN64) +#include +#endif + +#if defined(__APPLE__) +#include +#include +#else +#include +#include +#endif using namespace std; using namespace cv; + void Example_MSER(vector &fileName); static void help() @@ -96,10 +115,84 @@ String Legende(SimpleBlobDetector::Params &pAct) } +const int win_width = 800; +const int win_height = 640; + +struct DrawData + { + ogl::Arrays arr; + ogl::Texture2D tex; + ogl::Buffer indices; + }; + +void draw(void* userdata); + +void draw(void* userdata) + { + DrawData* data = static_cast(userdata); + + glRotated(0.6, 0, 1, 0); + + ogl::render(data->arr, data->indices, ogl::TRIANGLES); + } int main(int argc, char *argv[]) { - + +Mat imgcol = imread("../data/lena.jpg"); +namedWindow("OpenGL", WINDOW_OPENGL); +//resizeWindow("OpenGL", win_width, win_height); + +Mat_ vertex(1, 4); +vertex << Vec3f(-1, 1,0), Vec3f(-1, -1,0), Vec3f(1, -1,1), Vec3f(1, 1,-1); + +Mat_ texCoords(1, 4); +texCoords << Vec2f(0, 0), Vec2f(0, 1), Vec2f(1, 1), Vec2f(1, 0); + +Mat_ indices(1, 6); +indices << 0, 1, 2,2, 3, 0; + +DrawData *data = new DrawData; + +data->arr.setVertexArray(vertex); +data->arr.setTexCoordArray(texCoords); +data->indices.copyFrom(indices); +data->tex.copyFrom(imgcol); + +glMatrixMode(GL_PROJECTION); +glLoadIdentity(); +gluPerspective(45.0, (double)win_width / win_height, 0.1, 100.0); + +glMatrixMode(GL_MODELVIEW); +glLoadIdentity(); +gluLookAt(0, 0, 3, 0, 0, 0, 0, 1, 0); + +glEnable(GL_TEXTURE_2D); +data->tex.bind(); + +glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); +glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_REPLACE); + +glDisable(GL_CULL_FACE); + +setOpenGlDrawCallback("OpenGL", draw, data); + +for (;;) + { + updateWindow("OpenGL"); + int key = waitKey(40); + if ((key & 0xff) == 27) + break; + } + +setOpenGlDrawCallback("OpenGL", 0, 0); +destroyAllWindows(); + + + + + + vector fileName; Example_MSER(fileName); Mat img(600,800,CV_8UC1); @@ -339,6 +432,11 @@ void Example_MSER(vector &fileName) } + + + + + int channel = 1; int histSize = 256 ; float range[] = { 0, 256 };