先处理图像,滤去杂质,进行霍夫线变换,得到线段的序列,选择一根最长的线,这里简单处理,选择纵向最长的,进行角度的计算。
#include <iostream>
#include <opencv2/opencv.hpp>
#include <queue>
#include <math.h>
using namespace std;
using namespace cv;
int main()
{
IplImage * g1 = cvLoadImage("倾斜的尺子.bmp", 1);//原图
IplImage * g2 = cvCreateImage(cvSize(g1->width, g1->height), IPL_DEPTH_8U, 1);//存储灰度化后的图像
IplImage * g3 = cvCreateImage(cvSize(g1->width, g1->height), IPL_DEPTH_8U, 1);//存储二值化、腐蚀、膨胀后的图像
CvMemStorage* m_storage = cvCreateMemStorage(0);
int length = 0;
int maxTemp = 0;
int maxLength = 0;
double slope = 0;//斜率
int tubeAngle = 0;//角度
IplImage *dst = cvCloneImage(g1);//霍夫变换得到的直线画在dst上
cvShowImage("原图", g1);
cvCvtColor(g1, g2, CV_BGR2GRAY);// 转化为灰度图像
cvAdaptiveThreshold(g2, g3, 255,