تشخیص رنگ و مرکر آن در emgu cv - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تشخیص رنگ و مرکر آن در emgu cv

+1 امتیاز

سلام
میخاستم با emgu یک رنگ رو تشخیض بدم و مرکز جرم اون رو پیدا کنم و دنبال کنم مثل این فیلم
http://www.youtube.com/watch?v=1x5NP_k_zEI

enter image description here

enter image description here

سوال شده فروردین 17, 1393  بوسیله ی محدثه (امتیاز 121)   9 28 42
ویرایش شده فروردین 17, 1393 بوسیله ی مصطفی ساتکی

1 پاسخ

+3 امتیاز
 
بهترین پاسخ

در ابتدا بایستی رنگ قرمز را فیلتر کنید که اینکار قبلا در پست 1 و پست 2 توضیح داده شده تنها نکته ای که وجود داره hue قرمز در ابتدا و انتهای بازه وجود داره اگر دایره ای تصویر کنید بهم پیوسته هستند در بازه 0 تا 50 و بازه 150 تا 180 برای رنگ قرمز می باشد.

پس از بدست آوردن ماسک باید به دنبال کانتور بزرگ باشید که باید findContour مجموعه کانتور ها را بدست آورده و با contourArea مساحت هر یک از کانتور ها را.

در نهایت باید مرکز  ثقل بلاب ماکزیمم را بدست آورید بوسیله مومنت که قبلا در این پست توضیح داده شده .

 

int findMaxBlob(InputArray _src,vector<vector<Point>> &contours){
	Mat src = _src.getMat().clone();
	
	findContours(src, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
	int max_index = -1;
	int max_area = 0;
	for (size_t i = 0; i < contours.size(); i++){
		int cur_area = contourArea(contours[i]);
		if (cur_area > max_area){
			max_area = cur_area;
			max_index = i;
		}
	}
	return max_index;
}
int _tmain(int argc, _TCHAR* argv[])
{
	Mat img1 = imread("d:\\a.jpg", 1);

	Mat hsv_i;

	cvtColor(img1, hsv_i, CV_BGR2HSV);
	Mat mask_img1, mask_img2, mask_img;
	inRange(hsv_i, Scalar(150, 180, 20), Scalar(180, 255, 255), mask_img1);
	inRange(hsv_i, Scalar(0, 180, 20), Scalar(50, 255, 255), mask_img2);

	mask_img = mask_img1 | mask_img2;
	vector<vector<Point>> contours;
	int max_index = findMaxBlob(mask_img, contours);
	Moments m = moments(mask_img, false);
	Point center(m.m10 / m.m00, m.m01 / m.m00);
	Rect br = boundingRect(contours[max_index]);
	rectangle(img1, br, CV_RGB(0, 255, 0), 1);
	circle(img1, center, 3, CV_RGB(255, 0, 0), -1);
	imshow("dd", img1);
	imwrite("d:\\img.png", mask_img);
	waitKey(0);
	return 0;
}

 

پردازش تصویر, c#, emgu cv

پردازش تصویر, c#, emgu cv

پاسخ داده شده فروردین 23, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده بهمن 1, 1393 بوسیله ی haniye sarbazi
...