我的問題是類似OpenCV: Detect blinking lights in a video feed openCV detect blinking lights從圖片
我要檢測從中將有LED對象的任何圖像的LED開/關狀態。 LED物體可以是任何尺寸(但大部分是圓形的)。雖然可以打開或關閉,但獲取該圖像中所有LED的位置非常重要。首先,我想知道只有ON的LED的狀態和位置。現在圖像源對於我的工作是靜態的,但它必須來自任何具有發光LED的產品的視頻。所以沒有模板圖像減去背景的機會。
我一直在使用帶閾值,輪廓和圓方法的OpenCV(新OpenCV的)嘗試,但沒有找到SUCESSFUL。如果有任何源代碼或解決方案,請分享。該解決方案可以是任何不僅使用OpenCV,這將給我的結果。這將不勝感激。
從另外兩個問題不同的是,我想要得到的LED數量的圖像中是否可以開啓或關閉,所有LED的狀態。我知道這非常複雜。首先,我試圖檢測圖像中發光的LED。我已經實施了我在下面分享的代碼。我有不同的實現,但下面的代碼能夠通過繪製輪廓向我展示發光的LED,但輪廓的數量比發光的LED多。所以我無法獲得至少發光的LED總數。請給我建議你的意見。
int main(int argc, char* argv[])
{
IplImage* newImg = NULL;
IplImage* grayImg = NULL;
IplImage* contourImg = NULL;
float minAreaOfInterest = 180.0;
float maxAreaOfInterest = 220.0;
//parameters for the contour detection
CvMemStorage * storage = cvCreateMemStorage(0);
CvSeq * contours = 0;
int mode = CV_RETR_EXTERNAL;
mode = CV_RETR_CCOMP; //detect both outside and inside contour
cvNamedWindow("src", 1);
cvNamedWindow("Threshhold",1);
//load original image
newImg = cvLoadImage(argv[1], 1);
IplImage* imgHSV = cvCreateImage(cvGetSize(newImg), 8, 3);
cvCvtColor(newImg, imgHSV, CV_BGR2HSV);
cvNamedWindow("HSV",1);
cvShowImage("HSV", imgHSV);
IplImage* imgThreshed = cvCreateImage(cvGetSize(newImg), 8, 1);
cvInRangeS(newImg, cvScalar(20, 100, 100), cvScalar(30, 255, 255), imgThreshed);
cvShowImage("src", newImg);
cvShowImage("Threshhold", imgThreshed);
//make a copy of the original image to draw the detected contour
contourImg = cvCreateImage(cvGetSize(newImg), IPL_DEPTH_8U, 3);
contourImg=cvCloneImage(newImg);
cvNamedWindow("Contour",1);
//find the contour
cvFindContours(imgThreshed, storage, &contours, sizeof(CvContour), mode, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
int i = 0;
for (; contours != 0; contours = contours->h_next)
{
i++;
//ext_color = CV_RGB(rand()&255, rand()&255, rand()&255); //randomly coloring different contours
cvDrawContours(contourImg, contours, CV_RGB(0, 255, 0), CV_RGB(255, 0, 0), 2, 2, 8, cvPoint(0,0));
}
printf("Total Contours:%d\n", i);
cvShowImage("Contour", contourImg);
cvWaitKey(0);
cvDestroyWindow("src"); cvDestroyWindow("Threshhold");
cvDestroyWindow("HSV");
cvDestroyWindow("Contour");
cvReleaseImage(&newImg); cvReleaseImage(&imgThreshed);
cvReleaseImage(&imgHSV);
cvReleaseImage(&contourImg);
}
什麼不適合你一些更多的食物?沒有工作比較模糊,解釋你是否有執行問題或爲什麼你的測試沒有成功(至少你對此有何看法)。另外,對於另外兩個問題,你有什麼不同? – jlengrand
我編輯了我的問題並添加了代碼。 – Keerthi
你可以把你正在使用什麼樣的圖像?幾個例子。 – maximus