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




//---------------------------------------------------------------------------

#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