Iawfy_ 2022-05-27 16:27 采纳率: 50%
浏览 121
已结题

opencvsharp画线擦除问题

问题遇到的现象和发生背景

opencvsharp 在winform上实现用鼠标进行涂鸦以及橡皮擦功能
我的涂鸦画线的逻辑是: 在picturebox的mousedown事件记录下鼠标的位置并转化成对应到图像上的点位,再调用 Cv2.Polylines() 来实现画线,结果测试都是OK的 ;而 橡皮擦的逻辑就是 跟画线差不多,都是先记录下相应点位,只是画的图像不同,我先创建一个与原图同大小的全为0的掩膜,然后再这个掩膜上进行画线,得到结果就是一张只有线部分区域不是0,其他空白部分都是0,然后再调用 CopyTo() 方法,并用上前面的掩膜,这样就将原来没有画过线的图像的点位置的像素赋值到新的需要进行擦除的图像上了。目前画各种线都是正常的 ,但是实现橡皮擦时 结果就不对了
下面是我画线的类 以及运行结果

问题相关代码,请勿粘贴截图
    class yLines
    {
        private int _thickness = 0;
        //是否是橡皮
        public bool IsEraser { set; get; }
        //点位数据
        public List<OpenCvSharp.Point> points = new List<Point>();

        public yLines(bool IsEraser = false)
        {
            this.IsEraser = IsEraser;
        }
        //画笔粗细
        public int thickness
        {
            set
            {
                _thickness = value;
                if (_thickness <= 0)
                    _thickness = 1;
            }
            get
            {
                return _thickness;
            }
        }

        //画笔颜色
        public OpenCvSharp.Scalar color { set; get; }
        //正常线
        public Mat DrawLines(Mat src)
        {
            List<List<OpenCvSharp.Point>> tempL = new List<List<OpenCvSharp.Point>>();
            tempL.Add(points);
            Cv2.Polylines(src, tempL, false, color, thickness);
            return src;
        }
        //橡皮 
        // 更新的图像为 src 最原始的图像为 oriImg 利用copyTo 将原始图像点位的像素覆盖到 src上实现橡皮擦
        public Mat DrawEraser(Mat src, Mat oriImg)
        {
            Mat mask = Mat.Zeros(src.Size(), MatType.CV_8UC3);
            if (src.Size() != oriImg.Size())
                return mask; 
            List<List<OpenCvSharp.Point>> tempL = new List<List<OpenCvSharp.Point>>();
            tempL.Add(points);
            //  mask只有线部分非0  其他都是0
            Cv2.Polylines(mask, tempL, false, color, thickness);  
            oriImg.CopyTo(src, mask);
            return src;  
        }
    } 

根据 IsEraser 变量去判断再绘画时调用 画线的方法是调用画橡皮的方法

运行结果及报错内容

img

能够擦除一些颜色 但是会留下原来的痕迹,是不是图像层的问题啊 运行时都是 MatType.CV_8UC3 啊
问题出在哪里了??

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 6月4日
    • 创建了问题 5月27日

    悬赏问题

    • ¥15 高通uboot 打印ubi init err 22
    • ¥20 PDF元数据中的XMP媒体管理属性
    • ¥15 R语言中lasso回归报错
    • ¥15 网站突然不能访问了,上午还好好的
    • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
    • ¥15 semrush,SEO,内嵌网站,api
    • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
    • ¥15 振荡电路,ADS仿真
    • ¥15 关于#c语言#的问题,请各位专家解答!
    • ¥15 这个如何解决详细步骤