void CChildView::OnImgprcThinning() { Thinning(m_hDIB); //在屏幕上显示位图 CDC* pDC=GetDC(); DisplayDIB(pDC,m_hDIB); }
std::vector<int> LightplaneCalibrator::AddLightImage( std::vector<cv::Mat>& srcs_light) { std::vector<int> return_value; std::vector<cv::Point>::iterator begin_100, end_900, itr; ims_points_.clear(); for (int i = 0; i < srcs_light.size(); i++) { std::vector<cv::Point> pts; std::vector<cv::Point2f> ptfs; cv::Mat im = srcs_light[i], gray; if (im.channels() == 3) { cvtColor(im, gray, CV_BGR2GRAY); } else { gray = im; } cam_->UndistorImage(gray, gray); medianBlur(gray, gray, 11); cv::Mat threshold_out; cv::threshold(gray, threshold_out, 25, 255, CV_THRESH_BINARY); cv::Mat dialateStructure = cv::getStructuringElement( cv::MorphShapes::MORPH_RECT, cv::Size(15, 15)); dilate(threshold_out, threshold_out, dialateStructure, cv::Point(-1, -1)); #ifdef _DEBUG_JIANG_ // for debug cv::namedWindow("threshold_medianBlur_out"); cv::imshow("threshold_medianBlur_out", threshold_out); /*imwrite("threshold_medianBlur_out.bmp",threshold_out);*/ cv::waitKey(200); #endif std::vector<std::vector<cv::Point> > contours; std::vector<cv::Vec4i> hierarchy; findContours(threshold_out, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, cv::Point(0, 0)); /// Draw contours cv::Mat drawing = cv::Mat::zeros(threshold_out.size(), CV_8U); for (size_t i = 0; i < contours.size(); i++) { if (contours[i].size() > 200) { //Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) ); drawContours(drawing, contours, (int)i, cv::Scalar(255), CV_FILLED, 8, hierarchy, 0, cv::Point()); } } cv::Mat thining_output; Thinning(drawing, thining_output); #ifdef _DEBUG_JIANG_ cv::imshow("thining_output", thining_output); cv::waitKey(200); #endif findNonZero(thining_output, pts); for (itr = pts.begin(); itr != pts.end(); ++itr) { if ((*itr).y <= 100) { begin_100 = itr; } if ((*itr).y <= 900) { end_900 = itr; } } ptfs.assign(begin_100, end_900); ims_points_.push_back(ptfs); } //std::ofstream log; //log.open("ims_points.txt"); //for (int i = 0; i < ims_points_.size(); i++) { // for (int j = 0; j < ims_points_[i].size(); j++) { // log << ims_points_[i][j].x << " " << ims_points_[i][j].y << " " << i + 1 // << std::endl; // } // log << std::endl; //} return return_value; }