我说下思路吧,你自己动手来
边缘检测分割把每个图形分割出来每个图形是个闭包区域
对分割出来的区域单独做直线检测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"
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)