我目前正在使用OpenCVSharp4修复旋转/扭曲的图像。
public static void FixImagePerspective(string fullPath, PointF[] pointsArray)
{
Bitmap srcImg = Image.FromFile(fullPath) as Bitmap;
var width = srcImg.Width;
var height = srcImg.Height;
Mat src = Cv2.ImRead(fullPath);
var dst = new Mat();
var dsize = new OpenCvSharp.Size(width, height);
var srcTri = new Mat(4, 1, MatType.CV_32FC2, pointsArray);
var dstTri = new Mat(4, 1, MatType.CV_32FC2, new int[] { 0, 0, height, 0, height, width, 0, width });
var M = Cv2.GetPerspectiveTransform(srcTri, dstTri);
Cv2.WarpPerspective(src, dst, M, dsize, InterpolationFlags.Linear, BorderTypes.Constant, new Scalar());
Cv2.ImWrite($"C:\\tmp\\Fixed\\{name}_{count}_corrected.jpg", dst);
}这个功能在我的本地机器上正常工作。但是当将它部署到windowsservercore-ltsc2019 Docker容器中时。一旦到了Cv2.ImRead,它就会抛出以下异常
The type initializer for 'OpenCvSharp.Internal.NativeMethods' threw an exception我尝试使用依赖项-walker来查找容器中缺少的*.dll文件并相应地复制它,但是它解决不了这个问题。我也尝试过在码头容器上安装vc_redist,但是它也没有解决这个问题。
在docker容器中运行OpenCVSharp4似乎存在问题。我已经安装了OpenCvSharp4.runtime.win软件包。但这不管用
我用mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019做我的码头集装箱。
任何关于如何解决这个问题的建议
发布于 2022-03-29 10:30:19
根本原因可能是服务器核心中不存在的一些Windows组件。
作为快速修复,您可以使用完整的windows容器mcr.microsoft.com/windows (现在由mcr.microsoft.com/server代替)。
Windows容器/主机兼容性很棘手,但我认为mcr.microsoft.com/windows:1809与您的ltsc2019相当。
一旦运行了它,您就可以使用dockerfile中的多个层对服务器核心容器进行从完整api容器复制dll。。
有一个关于依赖于Windows (默认情况下在Windows上不存在)的公开github发行,其中有一个可以复制以解决问题的方便的dll文件列表.
https://stackoverflow.com/questions/71235566
复制相似问题