这可能被称为“感兴趣的区域”我不太确定。但是,我想做的事情很容易解释。
我有一张照片需要与网格对齐。
首先;显示“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);
使用scaleFactor的两个实例将在X& Y中创建统一缩放。使用两个不同的比例因子将独立地缩放X和Y.
答案 1 :(得分:0)
查看OpenCV的教程,对于带有面孔的图像,您可以使用Haar Cascades来简化工作。 (https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html#face-detection)
否则,请查看ROI(感兴趣区域)以提取区域并在其上应用算法(调整大小或裁剪)