使用Opencv搭配滑鼠事件畫線

各位前輩好

小弟目前以Opencv搭配滑鼠事件畫線

將圖片上任一點已鼠標點擊即可顯示座標

並且將任意點擊之兩點畫線

图片说明

現在小弟遇到之問題為

若要再任意點擊兩點

图片说明

所出現之線段則變成

第一次循環之第一點&第二次循環之第二點 之間的連線

附上代碼
請求各位前被指點指點

#include
#include
#include
#include
#include
#include

using namespace cv;
using namespace std;

float fontFace = FONT_HERSHEY_COMPLEX;
double fontScale = 1;
float thickness = 1.5;
char text[10];

Mat img = imread("C:/Hough Lines/Hough Lines Add.jpg");

void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{
if (event == EVENT_LBUTTONDOWN)
{
//cout << "Left button of the mouse is clicked - position (" << x << ", " << y << ")" << endl;
sprintf_s(text, "(%d,%d)", x, y);
putText(img, text, Point(x, y), fontFace, fontScale, Scalar(255, 255, 255), thickness, 1);
circle(img, Point(x, y), 5, Scalar(255, 255, 0), CV_FILLED);
imshow("Mouse Event", img);

    void count();
    {
        static int cnt = 0;
        cnt = cnt + 1;  //cout << "It have been called " << cnt << " times" << endl;
        static int pt1x = x;
        static int pt1y = y;

        if (cnt == 1)
        {
            int pt1x = x;
            int pt1y = y;
            cout << "point1.x = " << pt1x << endl;
            cout << "point1.y = " << pt1y << endl << endl;
        }
        if (cnt == 2)
        {
            int pt2x = x;
            int pt2y = y;
            cout << "point2.x = " << pt2x << endl;
            cout << "point2.y = " << pt2y << endl << endl;

            line(img, Point(pt1x, pt1y), Point(x, y), Scalar(255, 255, 0), 2);
            imshow("Mouse Event", img);

            double length,angle;
            length = sqrt((pt1x - x)*(pt1x - x) + (pt1y - y)*(pt1y - y));
            angle = cos(length/(x-pt1x));
            cout << "Length = " << length << endl << endl; //cout << "Angle = " << angle << endl;

            cnt = 0;
            static int pt1x = NULL;
            static int pt1y = NULL;
        }
    }   
}

}

int main()
{
Mat srcImage = imread("C:/Hough Lines/Original_Thresh_Binary_image.jpg");

Mat midImage, dstImage;
Mat GaussianBlur1;

if (!srcImage.data)
{
    printf("Can't find any data!");
    return -1;
}

Canny(srcImage, midImage, 150, 255, 3);
cvtColor(midImage, GaussianBlur1, CV_GRAY2BGR);
GaussianBlur(midImage, GaussianBlur1, Size(5, 5), 0, 0);

vector<Vec4i> lines;
HoughLinesP(GaussianBlur1, lines, 1, CV_PI / 180, 80, 50, 10);
for (size_t i = 0; i < lines.size(); i++)
{
    Vec4i l = lines[i];
    line(GaussianBlur1, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(186, 88, 255), 1, CV_AA);
}

//imshow("【Display1】", srcImage);
//imshow("【Display2】", midImage);
//imshow("【Display3】", GaussianBlur1);
imwrite("C:/Hough Lines/GaussianBlur1.jpg", GaussianBlur1);

Mat OTB2 = imread("C:/Hough Lines/Original_Thresh_Binary_image2.jpg");
Mat mid2;
Mat GaussianBlur2;

if (!OTB2.data)
{
    printf("Can't find Original_Thresh_Binary_image2.jpg !");
    return -2;
}

Canny(OTB2, mid2, 150, 255, 3);
cvtColor(mid2, GaussianBlur2, CV_GRAY2BGR);
GaussianBlur(mid2, GaussianBlur2, Size(5, 5), 0, 0);

vector<Vec4i> lines2;
HoughLinesP(GaussianBlur2, lines2, 1, CV_PI / 180, 80, 50, 10);
for (size_t i = 0; i < lines2.size(); i++)
{
    Vec4i l = lines2[i];
    line(GaussianBlur2, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(186, 88, 255), 1, CV_AA);
}

//imshow("【Display4】", OTB2);
//imshow("【Display5】", mid2);
//imshow("【Display6】", GaussianBlur2);
imwrite("C:/Hough Lines/GaussianBlur2.jpg", GaussianBlur2);

// GaussianBlur1+ GaussianBlur2

Mat GaussianBlur1_add = imread("C:/Hough Lines/GaussianBlur1.jpg");
Mat GaussianBlur2_add = imread("C:/Hough Lines/GaussianBlur2.jpg");

if (GaussianBlur1_add.empty() || GaussianBlur2_add.empty())
{
    if (GaussianBlur1_add.empty())
    {
        printf("Can't find the file GaussianBlur1.jpg!");
    }
    else
    {
        printf("Can't find the file GaussianBlur2.jpg!");
    }
    return -3;
}

Mat img_add;
Size size(GaussianBlur1_add.cols + GaussianBlur2_add.cols,
    MAX(GaussianBlur1_add.rows, GaussianBlur2_add.rows));
img_add.create(size, CV_MAKETYPE(GaussianBlur1_add.depth(), 3));
img_add = Scalar::all(0);

Mat outImg_left, outImg_right;
outImg_left = img_add(Rect(0, 0, GaussianBlur1_add.cols, GaussianBlur1_add.rows));
outImg_right = img_add(Rect(GaussianBlur1_add.cols, 0, GaussianBlur1_add.cols, GaussianBlur1_add.rows));

GaussianBlur1_add.copyTo(outImg_left);
GaussianBlur2_add.copyTo(outImg_right);
//namedWindow("Add", WINDOW_AUTOSIZE);
//imshow("Add", img_add);
imwrite("C:/Hough Lines/Hough Lines Add.jpg",img_add);
//
// Read image from file 
Mat mouse_img = imread("C:/Hough Lines/Hough Lines Add.jpg");
Mat img;
//if fail to read the image
if (mouse_img.empty())
{
    cout << "Error loading the image" << endl;
    return -4;
}
namedWindow("Mouse Event", 1);
mouse_img.copyTo(img);
imshow("Mouse Event", mouse_img);
setMouseCallback("Mouse Event", CallBackFunc, (void*)(&img));
waitKey(0);
destroyWindow("Mouse Event");
return 0;

}

                static int pt1x = x;
        static int pt1y = y;

        if (cnt == 1)
        {
            int pt1x = x;
            int pt1y = y; // 你第一次存的点,存到局部变量里了,没有存到上面定义的static变量。
            cout << "point1.x = " << pt1x << endl;
            cout << "point1.y = " << pt1y << endl << endl;
        }