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);
}