C# OpenCvSharp DrawChessboardCorners保存图像线条黑白异常
OpenCvSharp绘制棋盘格角点保存后颜色异常问题
FindCheckerBoard方法接收BitmapSource类型作为输入,通过BitmapSourceConverter将其转换为Mat格式,后续依次执行FindChessboardCorners、CornerSubPix处理流程,基于CornerSubPix输出的检测角点,在原始Mat对象上调用DrawChessBoardCorners方法绘制棋盘格标记。
调试过程中发现如下异常现象:
- 调用
Cv2.ImShow()预览图像时,棋盘格绘制线条为正常彩色 - 调用
Cv2.ImWrite()将图像保存为本地文件时,绘制线条变为白色,无彩色效果 - 使用ImageViewer调试传入
ImShow()、ImWrite()的Mat变量时,绘制线条显示为黑色
补充说明:在opencv-python中实现几乎完全一致的逻辑时,保存的图像线条为正常彩色,因此推测问题与OpenCvSharp库本身或BitmapSource输入转换环节有关。
复现代码
public int FindCheckerBoard(JObject param, BitmapSource imageSource, out BitmapSource imageResult) { JObject _param = param; Mat matSource = OpenCvSharp.WpfExtensions.BitmapSourceConverter.ToMat(imageSource); Mat matResult = matSource.Clone(); Size patternSize = new Size(4, 6); Size imageSize = new Size(0, 0); List<Mat> objectPoints = new List<Mat>(); var objectPointsArray = Create3DChessboardCorners(patternSize, 0.02f).ToArray(); var objectPointsMat = Mat<Point3f>.FromArray(objectPointsArray); imageSize.Width = matSource.Width; imageSize.Height = matSource.Height; Mat<Point2f> corner = new Mat<Point2f>(); var ret = Cv2.FindChessboardCorners(matSource, patternSize, corner); if (ret) { Mat gray = new Mat(); Point2f[] corner2 = null; if (matSource.Channels() >= 3) { Cv2.CvtColor(matSource, gray, ColorConversionCodes.BGR2GRAY); corner2 = Cv2.CornerSubPix(gray, corner.ToArray(), new OpenCvSharp.Size(11, 11), new OpenCvSharp.Size(-1, -1), TermCriteria.Both(30, 0.001)); } else { corner2 = Cv2.CornerSubPix(matSource, corner.ToArray(), new OpenCvSharp.Size(11, 11), new OpenCvSharp.Size(-1, -1), TermCriteria.Both(30, 0.001)); } var showPicture = _param[SHOW_PICTURE].ToObject<bool>(); Cv2.DrawChessboardCorners(matResult, patternSize, corner2, ret); if (showPicture == true) { Cv2.ImShow("FindCheckerBoard", matResult); Cv2.ImWrite(@"C:\1.png", matResult); Cv2.WaitKey(0); } } imageResult = OpenCvSharp.WpfExtensions.BitmapSourceConverter.ToBitmapSource(matResult); }
效果参考


咨询如何配置才能保存带有彩色绘制线条的输出图像。
内容的提问来源于stack exchange,提问作者Lunethan
相关产品推荐
相关产品推荐

