參考opencv開源上的,跑通了 注釋了一下,以便後續學習
#include #include #include
cv::point2f center(0,0);
cv::point2f computeintersect(cv::vec4i a,cv::vec4i b)
else
return cv::point2f(-1,-1);
}void sortcorners(std::vector& corners,cv::point2f center)
演算法流程:先彩色轉灰度,然後模糊求canny邊緣,再用hough檢測直線,求出四線交點,利用opencv自帶的求透視矩陣的函式求出透視矩陣,然後利用透視矩陣轉換源影象所需的四邊形,效果圖後續見:
int main()
cv::mat bw;
cv::cvtcolor(src,bw,cv_bgr2gray);
imshow("gray_src",bw);
cv::blur(bw,bw,cv::size(3,3));
imshow("blur",bw);
cv::canny(bw,bw,100,100,3);
imshow("cannyblur",bw);
std::vectorlines;
cv::houghlinesp(bw,lines,1,cv_pi/180,70,30,10);
//1畫素分辨能力 1度的角度分辨能力 >70可以檢測成連線 30是最小線長
//在直線l上的點(且點與點之間距離小於maxlinegap=10的)連成線段,然後這些點全部刪除,並且記錄該線段的引數,就是起始點和終止點
//needed for visualization only//這裡是將檢測的線調整到延長至全屏,即射線的效果,其實可以不必這麼做
for (unsigned int i = 0;icorners;//線的交點儲存
for (unsigned int i = 0;i= 0 && pt.y >=0)}}
參考** 四邊形優化
匆匆忙忙搞了一下四邊形優化,也就是做了幾道入門題而已 四邊形不等式詳解 反正我就記住這句話 判斷w是否為凸即判斷 w i,j 1 w i,j 的值隨著i的增加是否遞減 hdu 2829 include include include using namespace std define maxn 1...
四邊形填充
四邊形填充算,除了比較笨的洪流法外,就是掃瞄線法了 基本演算法是 1 求交,計算掃瞄線與多邊形的交點 2 交點排序,對第2步得到的交點按照x值從小到大進行排序 3 顏色填充,對排序後的交點兩兩組成乙個水平線段,以畫線段的方式進行顏色填充 4 是否完成多邊形掃瞄?如果是就結束演算法,如果不是就改變掃瞄...
定義四邊形 圓的內接四邊形
1 圓內接多邊形定義 多邊形的所有頂點都在同乙個圓上,這個多邊形叫圓內接多邊形,這個圓叫這個多邊形的外接圓。2 圓內接四邊形定義 四邊形的所有頂點都在同乙個圓上,這個四邊形叫圓內接四邊形,這個圓叫這個四邊形的外接圓。3 判定定理 如果乙個四邊形的對角互補,那麼它的四個頂點在同乙個圓上 簡稱四點共圓 ...