文章目录
效果

复现代码
void lane_detection(cv::Mat &src, cv::Mat &dst){dst = cv::Mat::zeros(src.size(),src.type());cv::Mat grid =cv::Mat::zeros(src.size(),src.type());int iStep = 25;int iNUmsX = src.cols / iStep;int inUmsY = src.rows / iStep;for(int i = 1; i <= inUmsY; i++){int yPos = i * iStep + src.cols / 5;cv::Point2d pt1,pt2;int iOffset = 10;pt1.x = 0 + iOffset;pt1.y = yPos;pt2.x = src.cols - iOffset;pt2.y = yPos;cv::line(grid,pt1,pt2,cv::Scalar(255), 1, cv::LINE_4);}for(int i = 1; i <= iNUmsX; i++){int xPos = i * iStep;cv::Point2d pt1,pt2;int iOffset = 10;pt1.x = xPos;pt1.y = 0 + iOffset + src.rows / 5;pt2.x = xPos;pt2.y = src.rows - iOffset;cv::line(grid,pt1,pt2,cv::Scalar(255), 1, cv::LINE_4);}cv::imshow("grid", grid);cv::Mat bitNot;cv::bitwise_and(src, grid, bitNot);cv::Mat add = cv::Mat::zeros(bitNot.rows, bitNot.cols,bitNot.type());int iDiffTh = 200;QTime timer;timer.start();//#pragma omp parallel for num_threads(10)for (int i = 1; i < bitNot.rows - 1; i++){for (int j = 1; j < bitNot.cols - 1; j++){int iValueX = (int)bitNot.at(i, j);int iValueXPre = (int)bitNot.at(i-1, j);int iValueXNext = (int)bitNot.at(i+1, j);int iValueY = (int)bitNot.at(i, j);int iValueYPre = (int)bitNot.at(i, j-1);int iValueYNext = (int)bitNot.at(i, j+1);if((iValueX - iValueXPre > iDiffTh && iValueX - iValueXNext > iDiffTh) ||(iValueY - iValueYPre > iDiffTh && iValueY - iValueYNext > iDiffTh)){add.at(i, j) = 255;}}}qDebug()<<"process time: "<> contours;//cv::findContours(matThresh,contours,)std::vector > contoursDefect;std::vector hierarchyDefect;cv::Mat canves;cv::cvtColor(src, canves,cv::COLOR_RGBA2RGB);cv::findContours(matThresh, contoursDefect, hierarchyDefect, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);for (size_t i = 0; i < contoursDefect.size(); i++){cv::Mat contour(contoursDefect.at(i));//第i个轮廓double area = contourArea(contour);if (area >= 50){cv::Moments moment;//矩moment = moments(contour, false);cv::Point2d pt1;double m00 = moment.m00 + 0.01;pt1.x = moment.m10 / m00;//计算重心横坐标pt1.y = moment.m01 / m00;//计算重心纵坐标cv::drawContours(canves, contoursDefect, i, cv::Scalar(255, 255, 0), -1);}}cv::imshow("canves", canves);cv::waitKey(0);}void test_lane_detection(){int i = 0;while(1){cv::Mat src;QString dir("D:\\QtProject\\Opencv_Example\\gen_grid_region\\scene_");QString path;if(i>9) path = QString("%1%2%3").arg(dir).arg(i++).arg(".png");else path = QString("%1%2%3%4").arg(dir).arg("0").arg(i++).arg(".png");cout<
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!