鼠標繪制線段
// 鼠標回調函數
void draw_circle(int event, int x, int y, int flags, void* param)
{
cv::Mat* img = (cv::Mat*)param;
if (event == cv::EVENT_LBUTTONDBLCLK)
{
cv::circle(*img, cv::Point(x, y), 100, cv::Scalar(0, 0, 255), -1);
}
}
// 鼠標回調函數
void draw_line(int event, int x, int y, int flags, void* param)
{
static cv::Point draw_line_startp; // 一定要是static
cv::Mat* img = (cv::Mat*)param;
if (event == cv::EVENT_LBUTTONDOWN) // 鼠標左鍵按下時執(zhí)行以下代碼塊。
{
draw_line_startp = cv::Point(x, y); // 記錄鼠標按下時的坐標作為起始點
}
else if (event == cv::EVENT_MOUSEMOVE && (flags & cv::EVENT_FLAG_LBUTTON)) //當鼠標左鍵按下并移動時執(zhí)行以下代碼塊。
{
cv::Point end_point(x, y); // 獲取當前鼠標移動位置作為終點
cv::line(*img, draw_line_startp, end_point, cv::Scalar(0, 0, 255), 2); // 在圖像上繪制線段
draw_line_startp = end_point; // 更新起始點為當前終點,以便下一次繪制
}
}
void opencvTool::drawingByMouse()
{
// 創(chuàng)建一個黑色的圖像
//cv::Mat img = cv::Mat::zeros(512, 512, CV_8UC3);
// 創(chuàng)建一個白色的圖像
cv::Mat img(512, 512, CV_8UC3, cv::Scalar(255, 255, 255));
// 創(chuàng)建一個窗口并綁定回調函數
cv::namedWindow("image");
cv::setMouseCallback("image", draw_line, &img); // 該函數將在鼠標事件發(fā)生時被調用
// 進入主循環(huán),顯示圖像
while (true)
{
imshow("image", img);
if (cv::waitKey(20) == 27) // 按下Esc鍵(對應的ASCII碼是27)。
{
break;
}
}
// 關閉窗口
cv::destroyAllWindows();
return;
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-858598.html
文章來源:http://www.zghlxwxcb.cn/news/detail-858598.html
到了這里,關于OpenCV鼠標繪制線段的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!