2017-08-16 51 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值。 –