前言
随着工业自动化、智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识别、定位、抓取、测量,缺陷检测等),而针对不同作业场景进行解决方案设计时,通常会借助PCL、OpenCV、Eigen等简单方便的开源算法库进行方案的快速验证和迭代以满足作业场景下的目标需求。
为了让对工业机器视觉方向感兴趣的同学能够少走一些弯路,故推出了此一系列简易入门教程示例,让初次使用者能够最简单直观地感受到当前所用算法模块的执行效果。
后续会逐步扩增与工业机器视觉相关的一些其它内容,如:
项目案例剖析、场景数据分析、基础算法模块、相机评测 等;
如有兴趣可加入群聊(若入群二维码被屏蔽,则可以通过Q群(1032861997)或评论、私信博主“群聊”,邀请入群),与同道同学及圈内同行一起交流讨论。
程序说明
随机生成点坐标数据,并计算最小包围矩形;
输出结果
代码示例
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
int main(int argc, char** argv){
cv::Mat image(600, 600, CV_8UC3);
cv::RNG& rng = cv::theRNG();
while(1)
{
char key;
int count = (unsigned)rng%100 + 3;
std::vector<cv::Point> points;
for(int i = 0; i < count; i++ )
{
cv::Point point;
point.x = rng.uniform(image.cols/4, image.cols*3/4);
point.y = rng.uniform(image.rows/4, image.rows*3/4);
points.push_back(point);
}
cv::RotatedRect box = cv::minAreaRect(cv::Mat(points));
cv::Point2f vertex[4];
box.points(vertex);
image = cv::Scalar::all(0);
for(int i = 0; i < count; i++ ){
cv::circle(image, points[i], 3,
cv::Scalar(rng.uniform(0,255),rng.uniform(0,255),
rng.uniform(0,255)), cv::FILLED, cv::LINE_AA);
}
for( int i = 0; i < 4; i++ ){
cv::line(image, vertex[i], vertex[(i+1)%4],
cv::Scalar(100, 200, 211), 2, cv::LINE_AA);
}
cv::imshow("最小包围矩形检测示例", image);
key = (char)cv::waitKey();
if( key == 27 || key == 'q' || key == 'Q' )
break;
}
return 0;
}
注:部分测试所用图片数据来源于网络,如有侵权,请联系博主删除,谢谢。