1

2008年からMacラップトップでOpenCVアプリケーションを実行しています(2.4 GHzのインテルコア2デュオプロセッサを搭載しています)。新しい Mac で同じアプリケーションを実行していて、非常にスムーズに動作していましたが、古い Mac に変更すると、カメラがフレームをドロップし、うまく動作しません。画像を小さくするなどして、コード内でこの問題を解決する方法はありますか? 私のアプリケーションは、複数の色のしきい値を設定して追跡し、ある位置から別の位置に線を引きます。

IplImage* GetThresholdedImage1(IplImage* img, int color)
{ 

   // Convert the image into an HSV image
IplImage* imgHSV = cvCreateImage(cvGetSize(img), 8, 3);
cvCvtColor(img, imgHSV, CV_BGR2HSV);
//yellow
// Create new image to hold thresholded image
IplImage* imgThreshed = cvCreateImage(cvGetSize(img), 8, 1);
if(color==1)
cvInRangeS(imgHSV, cvScalar(10, 100, 100), cvScalar(20, 255, 255), imgThreshed);

cvReleaseImage(&imgHSV);
return imgThreshed;
}

int main (int argc, const char * argv[]) {

CvCapture*capture=0;
capture=cvCaptureFromCAM( 1);
if(!capture)
{
    printf("Could not initialize capturing...\n");
    return -1;
}

cvNamedWindow("video");

IplImage* imgScribble = NULL;



while(true)
{  IplImage *frame=0;

    frame=cvQueryFrame(capture);

    if( !frame ) break;

    cvErode(frame, frame, 0, 2); // ADD this line

    cvSmooth( frame, frame, CV_GAUSSIAN, 9, 9 );

    // If this is the first frame, we need to initialize it
    if(imgScribble == NULL)
    {     
         imgScribble = cvCreateImage(cvGetSize(frame),8, 3);            
    }

IplImage* imgYellowThresh1 = GetThresholdedImage1(frame,1);
 CvMoments *moments_yellow = (CvMoments*)malloc(sizeof(CvMoments));


cvMoments(imgYellowThresh1,moments_yellow, 1);
  double moment10 = cvGetSpatialMoment(moments_yellow, 1, 0);
        double moment01 = cvGetSpatialMoment(moments_yellow, 0, 1);
        double area = cvGetCentralMoment(moments_yellow, 0, 0);  

    static int posX = 0;
    static int posY = 0;

    int lastX = posX;
    int lastY = posY;

    posX = moment10/area;
    posY = moment01/area;


if(lastX>0 && lastY>0 && posX>0 && posY>0) 

    {
        thickness=cvRandInt(&rng)%8;

        cvLine(imgScribble, cvPoint(posX, posY), cvPoint(lastX, lastY), CV_RGB(255,100,0),thickness,CV_AA);
}
4

0 に答える 0