2013-07-13 121 views
0

我有圖像,我要旋轉此圖像,像這樣: 旋轉必須是自動的。在另一方面旋轉角度必須被計算。在圖像上查找區域 - 自動旋轉圖像OpenCv

[1 - 圖片]

enter image description here

有什麼想法就OpenCV的這種旋轉?

我該如何提取這個圖像上的一個小矩形?像這樣: (我用紅色標出一些區域)

[2 - 圖片]

enter image description here

有什麼想法從OpenCV的這個圖像中提取該區域?

+0

你的第二個問題真的不清楚 –

+1

做一些關於霍夫變換的閱讀。這是一種檢測線條的算法。一旦你有線,根據方向對它們進行分類,並選擇線條最多的兩個正交方位。 – DCS

回答

0

我不知道openCV,但是你添加了C#和C++標籤,這讓我認爲你會接受一種可以用這些語言實現的算法。

要回答你的第一個問題:

如果您的圖片都是類似於你提供,你可以做這樣的事情的人(這些不一定是連續的步驟,它們的編號只是爲了便於參考):

  1. 轉換爲黑白&白沿黑(你可以這樣做只是概念上的,如果你願意,通過像素值與閾值比較,在下面)

  2. 旅遊輪廓在垂直,水平和對角線單像素步驟

  3. 記住您在旅行時的N對座標,以便N低於您圖像的直線的預期最小長度(以像素爲單位)(您必須調N:過長給你的數據太少,時間太短給你太多的噪音)

  4. 從目前的點的座標和點N步回來,計算mq
    y = m x + q如果abs(Δx) ≤ abs(Δy)m'和否則爲q',x = m' y + q',並製作4個直方圖,其中需要的分辨率爲

  5. 平滑比特的直方圖(例如,通過添加到每個信道的比特其相鄰信道的值的)

  6. 找到的mm'qq'的最大值,和,除去後圍繞最大值qq',其他2(局部)最大值qq';這些將是您對矩形4條邊界線方程參數的估計,其中m ≅ -m'(取決於您所需的最終結果,您可以使用m,m'或例如,(m-m')/2

  7. 找到的旋轉或將你的矩形到期望的位置(例如,上面的兩個線的交點可能必須被變換到某個位置)的仿射變換,並將其應用

點2通過在每個步驟中找到圍繞當前像素的循環探索中的8個可能中的第一個黑色像素,其以前一步驟的像素結束。例如,如果您的最後一步位於NE(東北)方向,並且您沿着輪廓順時針行駛,則按以下順序瀏覽周圍環境:NW,N,NE,E,SE,S,SW(缺失W因爲如果它是黑色的,它會在上一步中被選中)。您可以通過行掃描找到起始像素(這將使您在E方向到達,或者在反向行掃描時W方向到達)。

您還應計算輪廓的長度(以步爲單位)。如果它比你期望的要短得多,你應該丟棄它並再次嘗試,直到找到「真實」的輪廓。