1.源碼實現
#include <iostream>
#include <ctime>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage;
srcImage = imread("2.jpg");
//判斷圖像是否加載成功
if(srcImage.empty())
{
cout << "圖像加載失敗" << endl;
return -1;
}
//對圖像進行邊緣檢測
Mat midImage, dstImage;
Canny(srcImage, midImage, 50, 200, 3);
cvtColor(midImage, dstImage, COLOR_GRAY2BGR);
//進行霍夫變換
vector<Vec2f> lines;
HoughLines(midImage, lines, 1, CV_PI/180, 260, 0, 0);
//在圖像中繪出線段
for(size_t i=0; i<lines.size(); i++)
{
float rho = lines[i][0];
float theta = lines[i][1];
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a * rho, y0 = b * rho;
pt1.x = cvRound(x0+1000*(-b));
pt1.y = cvRound(y0+1000*(a));
pt2.x = cvRound(x0-1000*(-b));
pt2.y = cvRound(y0-1000*(a));
line(dstImage, pt1, pt2, Scalar(0,0,255), 1, 4);
}
imwrite("houghlines.jpg", dstImage);
return 0;
}
2.編譯源碼
$ g++ -o test test.cpp -std=c++11 -I/usr/local/include -L/usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgproc -Wl,-rpath=/usr/local/lib
3.運行結果