opencv拟合直线并在屏幕上绘出

#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <math.h>

int main()
{
 IplImage *img=cvCreateImage(cvSize(500,500),8,3);//开辟500×500的8位3通道的图像内存空间。
 CvRNG rng=CvRNG(-1);//产生随机数产生器的状态。

 cvNamedWindow("fitline",0);

 for (;;)
 {
  char key;
  int i;
  int count =cvRandInt(&rng)%100+1;//产生1~100之间的随机整数
  int outliers=count/5;//选取1/5数量的点作为outliers。
  float a=cvRandReal(&rng)*200;//产生0~1随机浮点数
  float b=cvRandReal(&rng)*40;
  float angle=cvRandReal(&rng)*CV_PI;//随机产生弧度
  float cos_a=cos(angle);
  float sin_a=sin(angle);
  CvPoint pt1 , pt2;
  CvPoint * points=(CvPoint*)malloc(count *sizeof(points[0]));
  CvMat pointMat=cvMat(1,count,CV_32SC2,points);
  float line[4];
  float d,t;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV 中,可以使用 `cv::fitLine` 函数来进行最小二乘拟合直线,并使用 `cv::line` 函数在图像上绘制出拟合直线。具体实现如下: ```c++ #include <opencv2/opencv.hpp> using namespace cv; int main() { // 加载图像 Mat image = imread("test.jpg", IMREAD_COLOR); // 构造数据点 std::vector<Point2f> points; points.emplace_back(50, 50); points.emplace_back(100, 150); points.emplace_back(150, 250); points.emplace_back(200, 350); points.emplace_back(250, 450); // 计算拟合直线 Vec4f lineParams; // 存储直线参数 fitLine(points, lineParams, cv::DIST_L2, 0, 0.01, 0.01); // 在图像上绘制直线 Point2f startPoint, endPoint; startPoint.x = lineParams[2] - 100 * lineParams[0]; startPoint.y = lineParams[3] - 100 * lineParams[1]; endPoint.x = lineParams[2] + 100 * lineParams[0]; endPoint.y = lineParams[3] + 100 * lineParams[1]; line(image, startPoint, endPoint, Scalar(0, 0, 255), 2); // 显示图像 imshow("image", image); waitKey(0); return 0; } ``` 在上面的代码中,`image` 是一个 `Mat` 类型的图像,表示待绘制直线的图像。`points` 是一个 `std::vector<Point2f>` 类型的数据,表示待拟合的点集。`fitLine` 函数的参数和上面的代码相同。`line` 函数的参数依次为: - `image`: 待绘制直线的图像 - `startPoint`: 直线的起点,是一个 `Point2f` 类型的点。 - `endPoint`: 直线的终点,是一个 `Point2f` 类型的点。 - `Scalar(0, 0, 255)`: 直线的颜色,这里使用红色。 - `2`: 直线的粗细,这里使用 2。 最后,函数会显示图像,并等待用户按下任意键才会退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值