我想从网络摄像头视频中减去绿色背景。 bellow显示了我如何从网络摄像头获取视频
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)
此函数的IplImage。那时原始帧是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 :(得分:1)
如果要复制没有遮罩中像素的图像,可以使用函数cvCopy(origImage,destImage,mask);
。有关详细信息,请参阅此SO post。
我建议你切换到C ++ API,它更容易理解,更少关注释放图像和内存泄漏。
编辑: 您也可以将一个图像复制到另一个图像而不使用cvCopy。你可以在这篇文章中填写代码:Copying a portion of an IplImage into another Iplimage (that is of same size is the source)