如何在OpenCV中点击三次鼠标绘制一个圆圈?

时间:2015-07-15 19:25:47

标签: c++ opencv draw

我想在3次鼠标点击的情况下在图像上画一个圆圈。 我的意思是我有一个图像,当我在这个图像上点击3次时,绘制了圆圈。另外我已经有了代码来找到给出3分的圆的参数。

Mat cember_denklemi(Point2f A,Point2f B,Point2f C) {
    double W[3][3]={{A.x,A.y,1},
                    {B.x,B.y,1},
                    {C.x,C.y,1}};

    double T[3][1]={-(A.x*A.x+A.y*A.y),
                    -(B.x*B.x+B.y*B.y),
                    -(C.x*C.x+C.y*C.y)};
    Mat M=Mat(3,3,CV_64F,W);
    Mat N=Mat(3,1,CV_64F,T);
    Mat L=M.inv()*N;

    return L;
}

这是我的主要内容:

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
#include <iostream>
using namespace std;
using namespace cv;

void mouseKordinat(int evt, int x, int y, int flags, void* ptr);
void getPixelValue(Mat img, int x, int y);
Mat image;

int main() {
    image = imread("c:/opencv2.4.6./atlas15.jpg");
    imshow("MyWindow", image);
    setMouseCallback("MyWindow", mouseKordinat, 0 );
    waitKey(0);
    return 0;
}

void mouseKordinat(int evt, int c, int r, int flags, void* ptr) {
    if(evt==CV_EVENT_LBUTTONDOWN) {
        getPixelValue(image,r,c);
    }
} 
void getPixelValue(Mat img, int r, int c) {
    Vec3b pix=img.at<Vec3b>(r,c);
    int B = pix.val[0];
    int G = pix.val[1];
    int R = pix.val[2];
    cout<<"Row:"<<r<<" "<<"Column:"<<c<<" - "; // mouse kordinatlari
    cout<<"B:"<<B<<" "<<"G:"<<G<<" "<<"R:"<<R<<"\n"; // kordinatın pixel değerleri
}

1 个答案:

答案 0 :(得分:-1)

我无法将这些鳕鱼结合起来;但我已经做到了

Service