Opencv 2.1 , Bcb 6 , incrustation motif dans un CvCapture
Salut
http://www.geckogeek.fr/afficher-une...us-opencv.html
J ai réussi à installer opencv 2.1 ( ici ), il y a qqs jours et je pensais approfondir mais j ai une erreur lors de la création de mask ( en rouge dans le code )
J ai pu tester ce même code avec Xe2 et OpenCv 2.3.1 et j ai toujours la même erreur : External Exception E06D7363
Je précise que j ai bien ajouté les .Lib aux projets et j ai même testé differents chemins pour l installation d OpenCv .
Je suis sur Seven 64 bits
Citation:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include "C:\Program Files (x86)\Borland\Opencv2.1\include\opencv\cv.h";
#include "C:\Program Files (x86)\Borland\Opencv2.1\include\opencv\highgui.h";
using namespace cv;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
IplImage* createMask(IplImage* image)
{
IplImage *mask;
mask = cvCreateImage( cvGetSize(image) ,IPL_DEPTH_8U, image->nChannels);
//mask = cvCreateImage( cvGetSize(image) , 8,1);
// image->depth, 1 ); //cvSize(640,480) // cvGetSize(image)
cvInRangeS(image, cvScalar( 0.0, 0.0,125.0), cvScalar( 130.0, 130.0,255.0 + 1.0), mask);
cvNot(mask, mask);
return mask;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
// Image & hsvImage
IplImage *image, *imagePNG, *mask;
// Video Capture
CvCapture *capture;
// Key for keyboard event
char key;
//imagePNG = cvCreateImage(cvSize(640,480),8,1);
// Import png image
imagePNG = cvLoadImage("1.png");
if (!imagePNG) Application->Terminate();
cvShowImage(" Image PNG ", imagePNG);
mask = createMask(imagePNG);
// cvCaptureFromCAM( 1
capture = cvCreateCameraCapture(1);
// Initialize the video Capture (200 => CV_CAP_V4L2)
capture = cvCreateCameraCapture(1);
// cvCaptureFromCAM( 1 );//cvCreateCameraCapture(200);
// Check if the capture is ok
if (!capture) { printf("Can't initialize the video capture.\n"); }
// Create the windows
cvNamedWindow("GeckoGeek Image PNG & Transparence", CV_WINDOW_AUTOSIZE);
// While we don't want to quit
while(key != 'Q' && key != 'q') {
// We get the current image
image = cvQueryFrame(capture);
// If there is no image, we exit the loop
if(!image) continue;
cvSetImageROI(image, cvRect(100, 100, imagePNG->width, imagePNG->height));
cvCopy(imagePNG, image, mask);
cvResetImageROI(image);
cvShowImage("GeckoGeek Image PNG & Transparence", image);
// We wait 10 ms
key = cvWaitKey(10);
}
// Destroy the window we have created
cvDestroyWindow("GeckoGeek Image PNG & Transparence");
// Destroy the mask
cvReleaseImage(&mask);
// Destroy the capture
cvReleaseCapture(&capture);
Le but dans un premier temps et d utiliser une image avec un fond de couleur uniforme sur lequel est dessiné un objet d une autre couleur
On isole ensuite l objet grâce à OpenCv .
Pour enfin l incruster dans un flux vidéo .
A terme ce serait une video filmée sur fond bleu par exemple qui sera destinée à être incrustée sur une autre vidéo .
J ajouterai pour finir qu OpenCv1.0 fonctionne tres bien avec bcb6