如何从三个鼠标点击在OpenCV绘制一个圆圈
How to draw a circle from three mouse clicks in OpenCV?
我想在给定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;
}
And this my main:
#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
}
我不能合并这些代码;但我已经做到了
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
#include <iostream>
using namespace std;
using namespace cv;
static int mouse_x = -1;
static int mouse_y = -1;
Mat circle_eq(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;
}
void mouseKordinat(int evt, int x, int y, int flags, void* ptr)
{
if(evt == CV_EVENT_MOUSEMOVE)
{
mouse_x = x;
mouse_y = y;
}
int tik;
tik = tik + 1;
}
void getPixelValue(Mat img, int x, int y);
Mat image;
int main()
{
image = imread("c:/qwz/1q.jpg");
imshow("MyWindow", image);
setMouseCallback("MyWindow", mouseKordinat, 0 );
tik = tik%=3;
if(tik==0)
{
int merkez=circle_eq(nokta(0), nokta(1), nokta(2));
circle(image,merkez,3, Scalar(255,255,255),-1,8, nokta(0));
}
if(tik>3)
{
int nokta[0][0]=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<<" - ";
cout<<"B:"<<B<<" "<<"G:"<<G<<" "<<"R:"<<R<<"n";
}
相关文章:
- 如何使用 opencv 绘制绿色矩形?
- Opencv,在图像中的对象周围绘制一个框
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- OPENCV-快速 简介:如何使用drawmatchesflags :: draw_rich_keypoints绘制关键
- 如何在Opencv中绘制匹配项
- OpenCV c++ 断言失败调用绘制轮廓
- 在OpenCV中绘制带有梯度颜色的线
- 在框架上使用 OpenCV 绘制矩形
- 如何在OpenCV中绘制线路
- 绘制凸度缺陷C OPENCV
- 如何在opencv中使用matlab c ++库绘制点
- 使用OpenCV教程中的任何一个进行人脸检测是否有任何函数可以计算绘制在人脸上的矩形的大小
- 从图像中裁剪椭圆形状,而不是在OpenCV中在内部绘制
- 使用 OpenCV C++绘制最大轮廓的凸包
- 使用Opencv/c++在Stream中的两点之间绘制aline
- 绘制opencv中多个移动对象的轨迹
- 如何在OpenFrameworks/OpenCV中使用HSV颜色绘制正方形
- OpenCV - 仅在绘制单应性时打印对象名称
- 使用 OpenCV 和 C++ 在图像中绘制投资回报率
- OpenCV 3.1 绘制轮廓 '(-215) npoints > 0'