Как получить вычтенное видео из маски

Я хочу вычесть зеленый фон из видео с веб-камеры.
ниже показано, как я получаю видео с веб-камеры

public static void main(String[] args) {

CvCapture capture =cvCreateCameraCapture(CV_CAP_ANY);  //
IplImage frame;

IplImage grayimg = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);

cvNamedWindow("Video",CV_WINDOW_AUTOSIZE);

for(;;)
{
frame = cvQueryFrame(capture);if(frame == null)
{
System.out.println("ERROR: NO Video File");
break;
}

cvShowImage("Video",hsvThreshold(frame));
char c = (char) cvWaitKey(30);

if(c==27) break;
}

cvReleaseCapture(capture);
cvDestroyWindow("Video");
}

Маска моего изображения перенастроена hsvThreshold(frame) эта функция. В это время оригинальный кадр frame

поэтому я хочу извлечь маску
hsvThreshold(frame) это так

     public static IplImage hsvThreshold(IplImage orgImg) {
// 8-bit, 3- color =(RGB)
IplImage imgHSV = cvCreateImage(cvGetSize(orgImg), 8, 3);
System.out.println(cvGetSize(orgImg));
cvCvtColor(orgImg, imgHSV, CV_BGR2HSV);
// 8-bit 1- color = monochrome
IplImage imgThreshold = cvCreateImage(cvGetSize(orgImg), 8, 1);

cvInRangeS(imgHSV, cvScalar(70, 50, 50, 0), cvScalar(150, 200, 200, 0), imgThreshold);
cvReleaseImage(imgHSV);
cvSmooth(imgThreshold, imgThreshold, CV_GAUSSIAN, 13);
cvNot(imgThreshold,imgThreshold);
return imgThreshold;
}

0

Решение

Если вы хотите скопировать ваше изображение без пикселей в маске, вы можете использовать функцию cvCopy(origImage,destImage,mask);, Видеть это ТАК сообщение для получения дополнительной информации.

Я рекомендую вам переключиться на API C ++, хотя его гораздо проще понять и меньше беспокоиться об освобождении образов и утечках памяти.

РЕДАКТИРОВАТЬ:
Вы также можете скопировать одно изображение на другое без cvCopy. Вы можете найти код для этого в этом посте: Копирование части IplImage в другой Iplimage (источник которого того же размера)

1

Другие решения


По вопросам рекламы [email protected]