0
嗨,我想學習opencv。用這個代碼我試圖把圓圈放到物體的中心。當我嘗試寫1,2,3等它是okey,但是當我嘗試將圓添加到對象的中心時,這是問題。 。C++ opencv找到對象的中心並添加圓圈
我的代碼:
void findcontours(){
cv::namedWindow("contourdemo",CV_GUI_EXPANDED);
src = cv::imread("/home/zugurtaga/Desktop/project/opencv/imgs/seed.jpg");
if(src.data){
if(src.channels() > 1){
cv::cvtColor(src,src,CV_RGB2GRAY);
}else {
src = src;
}
cv::Mat cImc = src.clone();
cv::threshold(cImc,cImc,150,255,CV_THRESH_BINARY_INV | CV_THRESH_OTSU);
cv::imshow("contourdemo",cImc);
cv::waitKey(0);
vector<vector <cv::Point> > contours;
vector<cv::Point> contPoly;
vector<cv::Vec4i> hierarchy;
cv::findContours(cImc,contours,hierarchy,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE);
cout << "Number of counts: " << contours.size() << endl;
tmp = cv::Mat::zeros(cImc.size(),CV_8UC3);
cv::RotatedRect rRect;
//Problem line ???
shapeMoments = cv::moments(contours);
cv::HuMoments(shapeMoments,shapeHumoments);
centerofmass.x = (shapeMoments.m10/shapeMoments.m00);
centerofmass.y = (shapeMoments.m01/shapeMoments.m00);
cout << "centerofmass.x: " << centerofmass.x << " centerofmass.y: " << centerofmass.y << endl;
// till here
for (size_t i = 0; i < contours.size(); i++) {
cv::drawContours(tmp,contours,i,cv::Scalar(120,0,0),CV_FILLED,8,hierarchy,0,cv::Point());
rRect = cv::minAreaRect(contours[i]);
cv::putText(tmp,cv::format("%d",i+1),rRect.center,1,1,cv::Scalar(255,255,255));
cv::circle(tmp,centerofmass,(int)3,cv::Scalar(255,255,255),-1,8,0);
}
cv::imshow("contourdemo",tmp);
cv::waitKey(0);
cv::destroyAllWindows();
}else{
cout << "No file.." << endl;
}
}
感謝您的幫助。