Python 图像定位OpenCV
这可能被称为“感兴趣区域”,我不太确定。但是,我想做的很容易解释 我有一张照片需要与网格对齐 首先;显示“此处”的小文本必须是屏幕顶部的151px 其次;从“此处”到下巴的位置8必须为631px 最后,;必须在鼻子上的第28行沿图片中间画一条直线 如果我说不通,请告诉我详细说明 我有以下想法(这是伪代码) 它只是简单地循环,直到通过一个调整大小的函数满足要求,这很像暴力强迫,但这就是我所能想到的 i、 ePython 图像定位OpenCV,python,image,opencv,Python,Image,Opencv,这可能被称为“感兴趣区域”,我不太确定。但是,我想做的很容易解释 我有一张照片需要与网格对齐 首先;显示“此处”的小文本必须是屏幕顶部的151px 其次;从“此处”到下巴的位置8必须为631px 最后,;必须在鼻子上的第28行沿图片中间画一条直线 如果我说不通,请告诉我详细说明 我有以下想法(这是伪代码) 它只是简单地循环,直到通过一个调整大小的函数满足要求,这很像暴力强迫,但这就是我所能想到的 i、 e 看看OpenCV的教程,对于具有面的图像,可以使用Haar级联来简化工作。() 否则,请
看看OpenCV的教程,对于具有面的图像,可以使用Haar级联来简化工作。()
否则,请查看ROI(感兴趣区域)以提取区域并在其上应用算法(调整大小或裁剪)考虑切换操作顺序以避免需要迭代。一点数学和一个视角的改变应该可以做到: 1.)从“此处”到下巴的距离为631px的图像 2.)使用a裁剪图像,使“此处”距离屏幕顶部为151px 3)画你的画 编辑: 假设已经定义了所有适当的约束,则可以将图像变形为适当的填充 如果你只需要做一个简单的比例尺。。。首先计算点之间的距离,使用类似的方法 然后创建比例因子以调整图像大小
float scaleFactor = euclideanDist(a,b) / 631;
cv::resize(input, output, cv::Size(), scaleFactor, scaleFactor, cv::INTER_LINEAR);
使用scaleFactor的两个实例将在X&Y中创建统一的缩放。使用两个不同的缩放因子将分别缩放X和Y。拿一支笔和一张纸,画出来,然后花一些时间计算(基本)数学。步骤1有几种方法@牛顿的答案中有一个。或者使用trig,在这里找到距离btwn和点,并将这些参数输入到resize中。你能澄清一下你的网格和设置吗?你想要一个纯粹的翻译解决方案,还是想要“填充”空间,从而可能扭曲你的图像?一个基本的调整大小就可以了。所以我不介意扭曲。我的网格是这样的。。151像素的空间。。。。631px头。剩下的图像,身体。(这就是我需要的结果)否则,图像会有所不同,但我确实将头部的顶部和底部计算为x,y值。我不完全确定我是否理解您在这一点上的问题,但我更新了答案,并提供了更多细节。这些是沿单个轴(X或Y)的线性距离吗?
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);