چرخش کانتور در OpenCV - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

چرخش کانتور در OpenCV

0 امتیاز
سلام . من تونستم تصویر را در OpenCV بچرخونم حالا برای انجام کاری قصد دارم کانتور را بچرخونم آیا راه سربعی برای اینکار وجود داره؟

ممنون
سوال شده اردیبهشت 3, 1394  بوسیله ی hamed_akbari (امتیاز 60)   2 8 11

1 پاسخ

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

برای این کار mass of center کانتور را بدست آورده و سپس کلیه نقاط را حول آن به روش قطبی بچرخانید.

#define BH_DEG_TO_RAD   CV_PI/180

cv::Point bhContourCenter(const BhContour& contour, bool center_of_mass ){
	cv::Point result;
	if (center_of_mass){
		Moments m = moments(contour, true);
		result = cv::Point(int(m.m10 / m.m00), int(m.m01 / m.m00));
	}
	else {
		cv::Rect rct = boundingRect(contour);
		result = cv::Point(rct.x + rct.width / 2, rct.y + rct.height / 2);
	}

	return result;
}

Point rotatePoint(const Point& pnt,const Point& center, float angle){
	auto rad = (int)norm(pnt - center);
	auto teta = bhGetLineAngle(center, pnt);

	Point result;
	float new_teta = angle + teta;
	result.x = center.x + cvRound(rad * cos(new_teta * BH_DEG_TO_RAD));
	result.y = center.y + cvRound(rad * sin(new_teta * BH_DEG_TO_RAD));
	return result;

}


BhContour rotateContour(const BhContour& contour, float angle){
	BhContour result;
	auto center = bhContourCenter(contour, true);
	result.reserve(contour.size());
	for (auto& pnt : contour)
		result.push_back(rotatePoint(pnt, center, angle));
	return result;
}
int main(){
BhContour contour;
rotateContour(contour,30);
return 0;
}

 

پاسخ داده شده اردیبهشت 4, 1394 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد اردیبهشت 6, 1394 بوسیله ی hamed_akbari
...