程序备份——第二个摄像头找棋子
发布日期:2021-05-14 10:17:35 浏览次数:12 分类:精选文章

本文共 1311 字,大约阅读时间需要 4 分钟。

找棋子系统化程序

2018.6.27:基础构建,2018.7.3:从直线检测开始,2018.7.7:完成畸变校正功能

相机内参数矩阵

[830.9317838495641, 0, 938.5277008797084; 0, 830.3159163847392, 461.5411800471416; 0, 0, 1]

畸变校正系数

[-0.3175523452664923, 0.108997589072442, 0.001226001063867935, -0.0009058942116935944, -0.01716439739558216]

基于OpenCVρά果开发的找棋子系统,包含摄像头读取、图像处理、畸变校正、矩形切割、二值化、边缘检测、填充、轮廓提取等核心功能。

系统采用相机内参数矩阵和畸变校正系数进行图像矫正,确保校正后的图像实现更精准的测量。

// 相机校正相关函数void InitMat(Mat&m, float* num) {  for (int i = 0; i < m.rows; ++i) {    for (int j = 0; j < m.cols; ++j) {      m.at
(i, j) = *(num + i * m.rows + j); } }}
// 做填充处理void fillHole(const Mat& srcBw, Mat& dstBw) {  Size m_Size = srcBw.size();  Mat Temp = Mat::zeros(m_Size.height + 2, m_Size.width + 2, srcBw.type());  srcBw.copyTo(Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)));  cv::floodFill(Temp, Point(0, 0), Scalar(255));  Mat cutImg;  Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)).copyTo(cutImg);  dstBw = srcBw | (~cutImg);}

主程序逻辑:

  • 从摄像头读取视频流,获取实时图像。
  • 边缘检测后,提取图像中的矩形区域。
  • 进行二值化处理和填充,消除空洞。
  • 使用OpenCV的轮廓检测算法,提取目标图像轮廓。
  • // 找轮廓检测相关代码vector
    contours;vector(Rect> RectContours);...// 检测是否有合理的旋转矩形if (RectContours.empty()) { cout << "未检测到有效的棋子轮廓" << endl; continue;}

    最终目标:

    通过优化算法和校正参数,实现稳定可靠的棋子测量系统,适用于工业自动化和精确测量场景。
    该系统能够快速识别目标区域,输出高精度的棋子轮廓和中心坐标,为后续机械臂操作提供准确位置信息。

    上一篇:opencv3找直线并求任意两条直线交点
    下一篇:opencv用VS2013调试时用Image Watch插件查看图片,代替一堆数据,直观很多

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年04月30日 00时31分27秒