这可能称为“感兴趣区域”,我不太确定。但是,我想做的事情很容易解释。
我有一张照片需要对齐到网格。
对于初学者;显示“这里”的小文本必须距屏幕顶部 151 像素。
下一步;从“这里”到下巴的位置8必须是631px
最后;必须在 Nose 上第 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.
最佳答案
考虑切换操作顺序以避免重复操作。一点点数学知识和视角的改变应该可以解决问题:
1.) Resize图像使得从“这里”到下巴的距离为 631px。
2.) 使用 region of interest裁剪图像,使“此处”距屏幕顶部 151 像素。
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。
关于python - 图像定位 OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45718043/