opencv 简单的例子

来源:互联网 发布:北京好吃的餐厅知乎 编辑:程序博客网 时间:2024/05/22 16:02
#define SHOW_IMG(img) \
{ \
cv::imshow(#img, img);\

}

cv::Scalar randomColor(const cv::RNG& rng);
cv::Point get_center(cv::Rect rect)
{
return cv::Point(rect.x + rect.width / 2, rect.y + rect.width / 2);
}


int _tmain(int argc, _TCHAR* argv[])
{
cv::Mat img, patter;
img = cv::imread("keys.bmp", 1);
patter = cv::imread("background.jpg", 1);


...

cv::RNG rng(0xFFFFFFF);
vector<cv::Rect> rects;
if(contours.size() > 0)
{
for(int i = 0; i < contours.size(); ++i)
{
cv::Scalar color = cv::Scalar(rng.uniform(0, 255),rng.uniform(0, 255),rng.uniform(0, 255));
cv::drawContours(output, contours, i, color, 1, 8, hierarchy, 0);
//char r = img.at(contours[i][0])[0];
//cv::Point seedpoint;
cv::Rect temp = cv::boundingRect(contours[i]);
rects.push_back(temp);


}
}
cv::Mat fill = output.clone();//cv::Mat::zeros(img.rows, img.cols, CV_8UC3);
//cv::floodFill(fill, cv::Point(10, 10), cv::Scalar(255), 0, cv::Scalar(10, 0, 0), cv::Scalar(30, 0, 0));
for(vector<cv::Rect>::iterator iter = rects.begin(); iter != rects.end(); ++iter)
{
cv::rectangle(output, cv::Point((*iter).x, (*iter).y) ,cv::Point((*iter).x + (*iter).width, (*iter).y + (*iter).height), cv::Scalar(0, 255, 0));
cv::putText(output, "center", get_center(*iter), CV_FONT_HERSHEY_COMPLEX, 0.5, cv::Scalar(0, 0, 255));
cv::floodFill(output, get_center(*iter), cv::Scalar(255), 0, cv::Scalar(10, 0, 0), cv::Scalar(30, 0, 0));
}



SHOW_IMG(gray);
SHOW_IMG(output);
SHOW_IMG(fill);

}


最终效果还不错,继续学习





0 0