forloop和point的问题

Problems with forloop and Points

本文关键字:问题 point forloop      更新时间:2023-10-16

所以我试图太清理我的代码,因为我使用了太多的点写起来。所以我想到了使用forloop的想法,但不幸的是,我似乎无法得到工作。

我已经把我的点变成了CVpoint数组,并做了一个forloop,但我似乎不能得到太多的工作

有谁知道我该怎么做吗?我的错误是不能将CVpoint转换为Int

我的功能:

    bool FindWhiteLine(Vec3b white)
    { 
bool color =  false;
uchar blue = white.val[0];
uchar green = white.val[1];
uchar red = white.val[2];
if(blue == 255 && green == 255 && red == 255)
        {
            color = true;
        }
        return color;
    }
    // extends the line until whiteline is found
    CvPoint DrawingLines(Mat img , CvPoint point,bool right)
    {
       int cols = img.cols;
       Vec3b drawingLine = img.at<Vec3b>(point); //defines the color at current positions
       while(point.x != cols){
        if(right == true)
        {
        point.x = point.x +1; //increases the line too the right
        drawingLine = img.at<cv::Vec3b>(point); 
        if(FindWhiteLine(drawingLine)){ // quites incase white line is found
            break; 
        }
    }
    else if(right == false)
        {
        point.x = point.x -1; //Decrease the line too the left
        drawingLine = img.at<cv::Vec3b>(point); 
        if(FindWhiteLine(drawingLine)){ // quites incase white line is found
            break; 
                }
            }
        }
        return point;
     }

My main:

void LaneDetector::processImage() {
    //http://docs.opencv.org/doc/user_guide/ug_mat.html   Handeling images
    Mat matImg(m_image);
    Mat gray; // for converting to gray
    cvtColor(matImg, gray, CV_BGR2GRAY); //Let's make the image gray 
    Mat canny; //Canny for detecting edges ,http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html
    Canny(gray, canny, 50, 170, 3); //inputing Canny limits 
    cvtColor(canny, matImg, CV_GRAY2BGR); //Converts back from gray
    // get matrix size  http://docs.opencv.org/modules/core/doc/basic_structures.html
    int rows = matImg.rows;
    int cols = matImg.cols;
    //Points 
    Point centerPoint;             // Old way
    Point centerPointEnd;  
    CvPoint startPos[4] , endXRight[4] , endxLeft[4]; // new way I tried
    for (int i = 0; i< 4; i ++) {
        startPos[i].x = cols/2;
        endXRight[i].x = DrawingLines(matImg,endXRight[i],true); // error here
        endxLeft[i].x = DrawingLines(matImg,endxLeft[i],false);
 }
          if (m_debug) {
    line(matImg, centerPoint,centerPointEnd,cvScalar(0, 0, 255),2, 8); 
      for (i = 0; i< 4; i ++) {
       line(matImg, startPos[i],endXRight[i],cvScalar(0, 0, 255),2, 8); 
       line(matImg, startPos[i],endXLeft[i],cvScalar(0, 0, 255),2, 8); 
    }

错误码:

   /home/nicho/2015-mini-smart-vehicles/project-template/sources/OpenDaVINCI-msv/apps/lanedetector/src/LaneDetector.cpp:176:25: error: cannot convert ‘CvPoint’ to ‘int’ in assignment
      endXRight[i].x = DrawingLines(matImg,endXRight[i],true);

  /home/nicho/2015-mini-smart-vehicles/project-template/sources/OpenDaVINCI-msv/apps/lanedetector/src/LaneDetector.cpp:177:24: error: cannot convert ‘CvPoint’ to ‘int’ in assignment
      endxLeft[i].x = DrawingLines(matImg,endxLeft[i],false);

这个错误再清楚不过了。函数返回一个类型为CvPoint的值,您尝试将它赋值给一个类型为int的变量。这是不可能的,因为你不能将CvPoint转化为int

看起来你想要赋值给这个点本身,而不是它的一个坐标:

endXRight[i] = DrawingLines(matImg,endXRight[i],true);
            ^ remove .x