用OpenCv实现简单图形检测

用OpenCv实现简单图形检测,第1张

我说下思路吧,你自己动手来

边缘检测分割把每个图形分割出来每个图形是个闭包区域

对分割出来的区域单独做直线检测houghline2我记得是这个函数在opencv里如果找到3根直线为三角形,没有为圆形,以此类推。

代码如下,觉得有帮助可以采纳下,后面有我在vscode的源代码,可以对照输入测试

#include <QApplication>

#include <QMainWindow>

#include <QPushButton>

#include <QVBoxLayout>

#include <QLabel>

#include <QPixmap>

#include <QTimer>

#include <opencv2/opencvhpp>

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

MainWindow(QWidget parent = nullptr)

: QMainWindow(parent)

{

// 创建显示摄像头图像的标签

imageLabel = new QLabel(this);

imageLabel->setAlignment(Qt::AlignCenter);

// 创建按钮

QPushButton captureButton = new QPushButton("拍照", this);

connect(captureButton, &QPushButton::clicked, this, &MainWindow::captureImage);

// 创建垂直布局并将标签和按钮添加到布局中

QVBoxLayout layout = new QVBoxLayout;

layout->addWidget(imageLabel);

layout->addWidget(captureButton);

// 创建主窗口并设置布局

QWidget centralWidget = new QWidget(this);

centralWidget->setLayout(layout);

setCentralWidget(centralWidget);

// 设置定时器,定时更新摄像头图像

QTimer timer = new QTimer(this);

connect(timer, &QTimer::timeout, this, &MainWindow::updateImage);

timer->start(30); // 每30毫秒更新一次图像

}

private slots:

void updateImage()

{

// 打开摄像头

cv::VideoCapture cap(0);

if (!capisOpened())

{

qDebug() << "无法打开摄像头!";

return;

}

// 读取摄像头图像

cv::Mat frame;

capread(frame);

caprelease();

// 将OpenCV图像转换为Qt图像,并显示在标签上

QImage qImage(framedata, framecols, framerows, framestep, QImage::Format_BGR888);

QPixmap pixmap = QPixmap::fromImage(qImage);

imageLabel->setPixmap(pixmapscaled(imageLabel->size(), Qt::KeepAspectRatio));

}

void captureImage()

{

// 获取当前摄像头图像

cv::VideoCapture cap(0);

if (!capisOpened())

{

qDebug() << "无法打开摄像头!";

return;

}

cv::Mat frame;

capread(frame);

caprelease();

// 转换为灰度图像

cv::cvtColor(frame, frame, cv::COLOR_BGR2GRAY);

// 直方化

cv::equalizeHist(frame, frame);

// 边缘检测

cv::Canny(frame, frame, 50, 150);

// 保存图像

cv::imwrite("captured_imagejpg", frame);

qDebug() << "已保存为 captured_imagejpg";

}

private:

QLabel imageLabel;

};

int main(int argc, char argv[])

{

QApplication a(argc, argv);

MainWindow w;

wshow();

return aexec();

}

#include "mainmoc"

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/meirong/8256126.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-09-14
下一篇2023-09-14

发表评论

登录后才能评论

评论列表(0条)

    保存