C++ 为什么OpenCV';是polarWarp在一些图像中引入了伪影?
我有一些小的(通常约60x60或更少)BGR图像,我正在使用OpenCV的warpPolar为其生成极轴投影。大多数情况下,它工作得很好,但偶尔我会得到一张图像(与正常工作的图像来自同一个相机源),其中有一个散射的伪影。三种不同的插值方法都会产生伪影。我确实发现增加极半径可以消除伪影,但有人能解释为什么会有不同吗 以下是代表调用warpPolar的代码:C++ 为什么OpenCV';是polarWarp在一些图像中引入了伪影?,c++,opencv,polar-coordinates,remap,C++,Opencv,Polar Coordinates,Remap,我有一些小的(通常约60x60或更少)BGR图像,我正在使用OpenCV的warpPolar为其生成极轴投影。大多数情况下,它工作得很好,但偶尔我会得到一张图像(与正常工作的图像来自同一个相机源),其中有一个散射的伪影。三种不同的插值方法都会产生伪影。我确实发现增加极半径可以消除伪影,但有人能解释为什么会有不同吗 以下是代表调用warpPolar的代码: Mat m = imread( "image.png", IMREAD_COLOR); Moments mom = mom
Mat m = imread( "image.png", IMREAD_COLOR);
Moments mom = moments( m);
int len = //... semi-major axis*2 for ellipse fit
warpPolar( m, polar, Size(), Point( mom.m10/mom.m00, mom.m01/mom.m00) , len, INTER_LINEAR);
以下是一个正常工作的图像:
--[极性]-->
这是一幅图像,分别使用“最近的”、“线性”和“LANCZOS4”,在大约四分之一的地方形成了彩虹状的伪影,在底部形成了一条灰色带:
--[1]->
…然后以更长的半径
问题的答案是warpPolar()调用需要一个额外的标志,指定如何填充源图像之外的像素。这修正了它:
warpPolar( m, polar, Size(), Point( mom.m10/mom.m00, mom.m01/mom.m00) , len, INTER_LINEAR | CV_WARP_FILL_OUTLIERS);
您正在显示或写入扭曲的图像吗?你能包括你用来显示它的代码吗?你能贴出原图吗?