int t = 0;
//char u;
// Loop controling vars
char keypress;
bool quit = false;
while (quit == false)
{ pFrame = cvQueryFrame(pCapture);//
cvLine(pFrame, /* the dest image */
cvPoint(0, 240), /* start point */
cvPoint(640, 240), /* end point */
cvScalar(0, 255, 0, 0), /* the color; green */
1, 8, 0); /* thickness, line type, shift */
CvMemStorage* storage = cvCreateMemStorage(0);
cvCvtColor(pFrame, tempFrame, CV_BGR2GRAY);
pProcessedFrame = findEdges(pFrame, lowSliderPosition, highSliderPosition, 3);//Επεξεργάσου για να βρεις τις άκρες
cvSmooth(tempFrame, tempFrame, CV_GAUSSIAN, 11, 11);//Για να αποφευχθούν λάθος εμφανίσεις κύκλου.
CvSeq* circles = cvHoughCircles(tempFrame, storage, CV_HOUGH_GRADIENT, 1, tempFrame->height/4, 50, 50, 20, 75);
for (size_t i = 0; i < circles->total; i++)
{
// round the floats to an int
float* p = (float*)cvGetSeqElem(circles, i);
cv::Point center(cvRound(p[0]), cvRound(p[1]));
int radius = cvRound(p[2]);
cvCircle(pFrame, center, 3, CV_RGB(0,255,0), -1, 8, 0 );//Ζωγράφισε το κέντρο του κύκλου.
cvCircle(pFrame, center, radius+1, CV_RGB(0,0,255), 2, 8, 0 );//Ζωγράφισε το περίγραμμα του κύκλου.
if (center.y == 240 )
{cvWaitKey(150);
t++;
}
else
{}
printf("x: %d y: %d r: %d t: %d\n",center.x,center.y, radius,t);
}
CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0, 0, 1, CV_AA);
cvPutText(pProcessedFrame, "blabla", cvPoint(10, 130), &font, cvScalar(255, 255, 255, 0));
cvShowImage("WebCam", pFrame);//Εμφάνισε τα κανονικά frame στο παράθυρο αυτό
cvShowImage("Processed WebCam", pProcessedFrame);//Δείξε τα επεξεργασμένα frame στο παράθυρο αυτό.
keypress = cvWaitKey(20);//Περίμενε 20 msec.
if (keypress == 27)//Άλλαξε το flag σε quit αν πατηθεί το πλήκτρο escape.
{
quit = true;
}} //Τέλος του while
皆さん、こんにちは。この質問はそれほど難しいものではないと思いますが、何らかの理由でインターネット上で答えが見つからないようです。たぶん私はいくつかの良い研究をしていません。
私のプログラムには、t という名前のカウンター (整数) があります。私が行っているいくつかのカメラの相互作用に応じて、時々変化します。これを、pProcessedFrame という名前のビデオ結果に表示したいだけです。
ここに含まれているコマンド cvPutText は、特定のテキストしか表示できないため、機能しません。前述のように、時々変更したいと思います。
私が認識していない他のコマンドはありますか?
@@編集@@
わかりました、これは以下で答えられました。最後の while コードと宣言を入れているだけです。いつか誰かがこれを必要とするかもしれません。どうもありがとうございました。xD
int t = 0;
char u=0;
// Loop controling vars
char keypress;
bool quit = false;
char msg[4*1024] = { 0 };
int frame_num = 0;
while (quit == false)
{
pFrame = cvQueryFrame(pCapture);
cvLine(pFrame,
cvPoint(0, 240),
cvPoint(640, 240),
cvScalar(0, 255, 0, 0), 1, 8, 0);
CvMemStorage* storage = cvCreateMemStorage(0);
cvCvtColor(pFrame, tempFrame, CV_BGR2GRAY);
pProcessedFrame = findEdges(pFrame, lowSliderPosition, highSliderPosition, 3);
cvSmooth(tempFrame, tempFrame, CV_GAUSSIAN, 11, 11);
CvSeq* circles = cvHoughCircles(tempFrame, storage, CV_HOUGH_GRADIENT, 1, tempFrame->height/4, 50, 50, 20, 60);
for (size_t i = 0; i < circles->total; i++)
{
// round the floats to an int
float* p = (float*)cvGetSeqElem(circles, i);
cv::Point center(cvRound(p[0]), cvRound(p[1]));
int radius = cvRound(p[2]);
cvCircle(pFrame, center, 3, CV_RGB(0,255,0), -1, 8, 0 );
cvCircle(pFrame, center, radius+1, CV_RGB(0,0,255), 2, 8, 0 );
if (center.y == 240 )
{
cvWaitKey(200);
t++;
frame_num=t;
}
else
{}
printf("x: %d y: %d r: %d t: %d\n",center.x,center.y, radius,t);
}
sprintf(msg, "Counter: %d", frame_num);
cvPutText (pFrame, msg, cvPoint(50,100), &font, cvScalar(255,255,0));
cvShowImage("WebCam", pFrame);
cvShowImage("Processed WebCam", pProcessedFrame);
keypress = cvWaitKey(20);
if (keypress == 27)
{
quit = true;
}}