C++ opencv中的V4L/AVLD是什么?

C++ opencv中的V4L/AVLD是什么?,c++,opencv,detection,geometry,C++,Opencv,Detection,Geometry,我遵循本页中的说明: 检测网球。这段代码可以为Python运行,对于形态学操作,它的要求是V4L/AVLD。它是使用函数cvClose()和cvOpen()来扩张和腐蚀遮罩的。我用C++编写代码,所以使用代码> CVDATIATE()/和代码> CVoODE()/Cuff>,但结果不如那个站点好。 这是我的结果:。(很抱歉,因为我没有足够的声誉来发布图片) 这是我的全部代码: #include "highgui.h" #include "cv.h" void main() { IplIm

我遵循本页中的说明: 检测网球。这段代码可以为Python运行,对于形态学操作,它的要求是V4L/AVLD。它是使用函数
cvClose()
cvOpen()
来扩张和腐蚀遮罩的。我用C++编写代码,所以使用代码> CVDATIATE()/<代码>和代码> CVoODE()/Cuff>,但结果不如那个站点好。 这是我的结果:。(很抱歉,因为我没有足够的声誉来发布图片) 这是我的全部代码:

#include "highgui.h"
#include "cv.h"
void main()
{
    IplImage* img = cvLoadImage("tennis.jpg",1);
    CvSize size = cvGetSize(img);
    IplImage *hsv = cvCreateImage(size, IPL_DEPTH_8U, 3);
    cvCvtColor(img, hsv, CV_BGR2HSV);
    CvMat *mask = cvCreateMat(size.height, size.width, CV_8UC1);
    cvInRangeS(hsv, cvScalar(0.11*256, 0.60*256, 0.20*256, 0),
                    cvScalar(0.14*256, 1.00*256, 1.00*256, 0), mask);
    cvReleaseImage(&hsv);
    IplConvKernel *se21 = cvCreateStructuringElementEx(21, 21, 10, 10, CV_SHAPE_RECT, NULL);
    IplConvKernel *se11 = cvCreateStructuringElementEx(11, 11, 5,  5,  CV_SHAPE_RECT, NULL);
    cvErode(mask, mask, se21); 
    cvDilate(mask, mask, se11);   
    cvReleaseStructuringElement(&se21);
    cvReleaseStructuringElement(&se11);

    /* Copy mask into a grayscale image */
    IplImage *hough_in = cvCreateImage(size, 8, 1);
    cvCopy(mask, hough_in, NULL);
    cvSmooth(hough_in, hough_in, CV_GAUSSIAN, 15, 15, 0, 0);

    /* Run the Hough function */
    CvMemStorage *storage = cvCreateMemStorage(0);
    CvSeq *circles = cvHoughCircles(hough_in, storage,CV_HOUGH_GRADIENT, 4, size.height/10, 100, 40, 0, 0);
    cvReleaseMemStorage(&storage);
    int i;
    for (i = 0; i < circles->total; i++) {
         float *p = (float*)cvGetSeqElem(circles, i);
         CvPoint center = cvPoint(cvRound(p[0]),cvRound(p[1]));
         CvScalar val = cvGet2D(mask, center.y, center.x);
         if (val.val[0] < 1) continue;
             cvCircle(img,  center, 3,             CV_RGB(0,255,0), -1, CV_AA, 0);
             cvCircle(img,  center, cvRound(p[2]), CV_RGB(255,0,0),  3, CV_AA, 0);
             cvCircle(mask, center, 3,             CV_RGB(0,255,0), -1, CV_AA, 0);
             cvCircle(mask, center, cvRound(p[2]), CV_RGB(255,0,0),  3, CV_AA, 0);
    }

    cvNamedWindow( "Output", CV_WINDOW_AUTOSIZE );
    cvShowImage( "Output", img );
    cvNamedWindow( "mask", CV_WINDOW_AUTOSIZE );
    cvShowImage( "mask", mask );
    cvWaitKey(0);
}
#包括“highgui.h”
#包括“cv.h”
void main()
{
IplImage*img=cvLoadImage(“netsiness.jpg”,1);
CvSize size=cvGetSize(img);
IplImage*hsv=cvCreateImage(大小、IPL_深度_8U、3);
CVT颜色(img、hsv、CV_BGR2HSV);
CvMat*mask=cvCreateMat(尺寸.高度,尺寸.宽度,CV_8UC1);
cvInRangeS(hsv,cvScalar(0.11*256,0.60*256,0.20*256,0),
cvScalar(0.14*256,1.00*256,1.00*256,0),掩码);
cvReleaseImage(&hsv);
IplConvKernel*se21=cvCreateStructuringElementEx(21,21,10,10,CV_SHAPE_RECT,NULL);
IplConvKernel*se11=cvCreateStructuringElementEx(11,11,5,5,CV\u SHAPE\u RECT,NULL);
CVE腐蚀(掩膜,掩膜,se21);
CVD扩张(面罩,面罩,se11);
cvReleaseStructuringElement(&se21);
cvReleaseStructuringElement(&se11);
/*将遮罩复制到灰度图像中*/
IplImage*hough_in=cvCreateImage(大小8,1);
cvCopy(掩码、hough_输入、空);
cvSmooth(hough_-in,hough_-in,CV_-GAUSSIAN,15,15,0,0);
/*运行Hough函数*/
CvMemStorage*storage=cvCreateMemStorage(0);
CvSeq*circles=cvHoughCircles(hough_in,storage,CV_-hough_GRADIENT,4,size.height/10100,40,0,0);
cvReleaseMemStorage(&storage);
int i;
对于(i=0;itotal;i++){
float*p=(float*)cvGetSeqElem(圆,i);
CvPoint center=CvPoint(cvRound(p[0]),cvRound(p[1]);
CvScalar val=cvGet2D(掩码,中心点y,中心点x);
如果(val.val[0]<1)继续;
CV圆(img,中心,3,CV_RGB(0255,0),-1,CV_AA,0);
CV圆(img,中心,cvRound(p[2]),CV_RGB(255,0,0),3,CV_AA,0);
cvCircle(掩模,中心,3,CV_RGB(0255,0),-1,CV_AA,0);
cvCircle(掩模,中心,cvRound(p[2]),CV_RGB(255,0,0),3,CV_AA,0);
}
cvNamedWindow(“输出”,CV_窗口_自动调整大小);
cvShowImage(“输出”,img);
cvNamedWindow(“遮罩”,CV_窗口_自动调整大小);
cvShowImage(“遮罩”,遮罩);
cvWaitKey(0);
}

有人能帮我获取V4L/AVLD并改进此代码吗?非常感谢。

V4L/AVLD用于网络摄像头。它与代码或算法没有任何关系

如果您使用的是Linux,则需要安装v4l utls包才能使用网络摄像头