1.点集拟合:
实现:
void visionagin:: Myminenclosing()
{
Mat img(500, 500, CV_8UC3, Scalar(255,255,255));
RNG rng(12345);
while (true)
{
int count = rng.uniform(1, 50);
vector<Point>points;
for (int i = 0; i < count; ++i)//生成随机点
{
Point p;
p.x = rng.uniform(img.cols / 4, 3 * img.cols / 4);
p.y = rng.uniform(img.rows / 4, 3 * img.rows / 4);
points.push_back(p);
circle(img, p, 1, Scalar(0, 0, 200));
}
imshow("点集1", img);
Mat img2;
img.copyTo(img2);
Point2f pt;
float r=0;
minEnclosingCircle(points, pt,r);
circle(img, pt, r, Scalar(200, 0, 0));
imshow("out", img);
vector<Point>pd;
double area = minEnclosingTriangle(points, pd);
cout << "s= " << area << endl;
for (int j = 0; j < pd.size(); ++j)//绘制三角形
{
if (j == pd.size() - 1)
{
line(img2, pd[j], pd[0], Scalar(0, 200, 0));
break;
}
line(img2, pd[j], pd[j+1], Scalar(0, 200, 0));
}
imshow("out2", img2);
char c = waitKey();
if (c == 27)
{
break;
}
}
}
2:QR二维码识别
实现:
void visionagin:: Myqrcodedetect()
{
Mat src = imread("C:\\Users\\86176\\Downloads\\visionimage\\qrcode.jpg");
imshow("qr", src);
QRCodeDetector qr;
vector<Point>points;//qr二维码四个顶点
bool isqr = qr.detect(src, points);
if (isqr)
{
cout << "there is qrcode,four points are : " << points << endl;
}
Mat afterqr;
string code;
code=qr.detectAndDecode(src,noArray(), afterqr);
cout << "information is : " << code.c_str() << endl;
}