#include
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"
#include
using namespace cv;
//Build Flags
//g++ -Wall -g -o "%e" "%f" -lSDL -lSDL_image -lSDL_ttf -lSDL_mixer -lGL -lGLU -lglut -lGLEW -lXi -lXmu `pkg-config --cflags --libs opencv`
SDL_Surface* image = NULL;
SDL_Surface* backbuffer = NULL;
SDL_Surface* asurface = NULL;
//pass in an opencv image, get a sureface out
//https://wiki.libsdl.org/SDL_CreateRGBSurfaceFrom
//http://stackoverflow.com/questions/22702630/converting-cvmat-to-sdl-texture
SDL_Surface* convertCV_MatToSDL_Texture(const cv::Mat &frame){
IplImage opencvimg2 = (IplImage)frame;
IplImage* opencvimg = &opencvimg2;
//Convert to SDL_Surface
asurface = SDL_CreateRGBSurfaceFrom(
(void*)opencvimg->imageData,
opencvimg->width, opencvimg->height,
opencvimg->depth*opencvimg->nChannels,
opencvimg->widthStep,
0xff0000, 0x00ff00, 0x0000ff, 0);
if(asurface == NULL){
printf("Couldn't convert Mat to Surface.");
return NULL;
} else {
printf("SUCCESS! conversion!");
return asurface;
}
cvReleaseImage(&opencvimg);
}
int main(int argc, char **argv){
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
//Init SDL
if(SDL_Init(SDL_INIT_EVERYTHING) < 0){
printf("SDL failed to initialize!");
SDL_Quit();
return 0;
}
backbuffer = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE);
SDL_WM_SetCaption("SDL!!!", NULL);
//Load the image
//image = SDL_LoadBMP("graphics/image.bmp" );
Mat frame;
cap >> frame; // get a new frame from camera
//imshow("edges", frame);
image = convertCV_MatToSDL_Texture(frame);
if(image == NULL){
printf("Image failed to load!\n");
SDL_Quit();
return 0;
}
//Draw the image
SDL_BlitSurface(image, NULL, backbuffer, NULL );
SDL_Flip(backbuffer);
//Wait
SDL_Delay(3000);
//Finish
SDL_FreeSurface( image);
SDL_Quit();
return 1;
}