2017-08-16 82 views
1

這可能被稱爲「感興趣區域」,我並不確定。但是,我想要做的事情很容易解釋。圖像定位OpenCV

我有一張照片需要對齊網格。

https://snag.gy/YaAWdg.jpg

對於初學者;在屏幕頂部顯示「here」的小文本必須是151px。

接下來;從「這裏」到下巴的位置8必須是631px

最後;必須在鼻子上的第28行畫一條直線。

如果我沒有意義,請告訴我詳細說明。

我有以下想法(這是僞代碼)

它只是循環,直到滿足要求具有調整大小功能,很像暴力破解,但多數民衆贊成在所有我能想到的..

while (top.x,y = 151,0) 
img.top-=1 ## this puts the image one pixel above until reaching the desired positioning 
while (top.x,y & eight.x,y != 631) 
resize += 1 # resize by 1 pixel until the height is reached 
## center the nose 
image.position = nose. 
+0

拿一支筆和一張紙畫出來,花一些時間來計算(小學)數學。 –

回答

1

考慮爲您的操作以防止需要進行迭代。一點點的數學和透視的變化應該做的伎倆:

1.)Resize圖像,使「從這裏」到下巴的距離是631px。

2.)使用region of interest裁剪圖像,使「here」距屏幕頂部151px。

3.)畫你的line

編輯:

affine transform in OpenCV將努力變身圖像到適當的填充,假設你所有適當的約束定義。

如果您只需要做一個簡單的規模......首先使用類似this的東西來計算點之間的距離。

Point2f a(10,10); 
Point2f b(100,100); 

float euclideanDist(Point& p, Point& q) { 
    Point diff = p - q; 
    return cv::sqrt(diff.x*diff.x + diff.y*diff.y); 
} 

然後創建一個比例係數調整圖片的大小

float scaleFactor = euclideanDist(a,b)/631; 
cv::resize(input, output, cv::Size(), scaleFactor, scaleFactor, cv::INTER_LINEAR); 

使用比例因子的兩個實例將創建一個在X & Y的均勻縮放使用兩個不同的比例係數將獨立縮放X和Y。

+0

你能告訴我一個步驟1的算法 –

+0

步驟1有幾種方法。@ I.Newton有一個答案。或者使用trig,在這裏和點找到距離btwn,並將這些參數提供給resize。你能澄清你的網格和設置?你想要一個純粹的翻譯解決方案,還是想「填補」空間,可能會扭曲你的形象? – Mepix

+0

一個基本的調整將做。所以我不介意扭曲。我的網格就像這樣.. 151 pix wihte space .... 631px head。其餘的圖像,身體。 (這就是我需要的結果),否則,圖像會變化,但我確實將頂部和底部的頭部計算爲x,y值。 –