openCV-初体验-马赛克

作者: f75dfaf80e43 | 来源:发表于2017-10-29 00:38 被阅读71次

场景: 传入一张UIImage 转出一张打有马赛克的UIImage

  • 导入framework

    • opencv2.framework
  • 写工具类

    • ImageUtills.h
        //核心头文件
        #import <opencv2/opencv.hpp>
        //对iOS支持
        #import <opencv2/imgcodecs/ios.h>
        
        //导入矩阵帮助类
        #import <opencv2/highgui.hpp>
        #import <opencv2/core/types.hpp>
      
        using namespace cv;
      
        @interface ImageUtills : NSObject
      
        + (UIImage *)opencvImage:(UIImage *)image level:(int)level;
      
        @end
      
      
    • ImageUtills.mm
       + (UIImage *)opencvImage:(UIImage *)image level:(int)level
      {
        //第一步:讲iOS图片 转化 openCV图片(Mat矩阵)
        Mat mat_image_src;
        UIImageToMat(image, mat_image_src);
      
        //第二步:确定宽高
        int width = mat_image_src.cols;
        int height = mat_image_src.rows;
      
        //图片类型->进行转换 ->将ARGB转化成RBG
        Mat mat_image_dst;
        cvtColor(mat_image_src, mat_image_dst, CV_RGBA2RGB,3);
      
        Mat mat_image_clone = mat_image_dst.clone();
      
        //第三步:马赛克处理
        //分析马赛克算法原理
        //level = 3 -> 3 * 3 矩阵
        //动态处理
        int x = width - level;
        int y = height - level;
      
        for (int i=0; i<y; i+= level) {
          for (int j=0; j<x; j+= level) {
              //创建一个矩形区域
              Rect2i mosaicRect = Rect2i(j,i,level,level);
              
              //给Rect2i区域 -> 填充数据->原始数据
              Mat roi = mat_image_dst(mosaicRect);
              
              //让整个矩形区域颜色保持一致
              //mat_image_clone.at<Vec3b>(i,j) ->像素点(颜色值组成->多个) ->ARGB数组
              Scalar scalar = Scalar(mat_image_clone.at<Vec3b>(i,j)[0],
                                     mat_image_clone.at<Vec3b>(i,j)[1],
                                     mat_image_clone.at<Vec3b>(i,j)[2]);
              
              //讲处理好矩形区域->数据->拷贝到图片上去->修改后的数据 
              Mat roiCopy = Mat(mosaicRect.size(),CV_8UC3,scalar);
              roiCopy.copyTo(roi);
            }
        }
        // 第四步 将openCV图片 转化 iOS图片
        return MatToUIImage(mat_image_dst);
      }
      
      
  • 调用函数

     image = [ImageUtills opencvImage:self.image.image level:50];
    
  • 存在的问题

    • 打马的范围不是整张图片,还需要最下优化

相关文章

  • openCV-初体验-马赛克

    场景: 传入一张UIImage 转出一张打有马赛克的UIImage 导入frameworkopencv2.fram...

  • opencv-图片马赛克处理

    实现图片马赛的方式很多,为什么这里要单独提opencv? 先看简介: OpenCV是一个基于BSD许可(开源)发行...

  • 阈值化

    OpenCV-图像阈值-简单阈值、自适应阈值、Otsu’s 二值化

  • OpenGLES滤镜开发汇总 —— 马赛克

    什么是马赛克 马赛克原理 马赛克的实现 方格马赛克的glsl实现如下: 得到的马赛克效果如下: 圆形马赛克的实现:...

  • 简易视频编辑器(马赛克,倍速)

    添加马赛克 这里我就说一下这个马赛克的东西.首先想说的是马赛克宽度,马赛克高度马赛克左上角位置x, 马赛克左上角位...

  • yii初体验(7-15)

    yii初体验(7)视图 yii初体验(8)模块 yii初体验(9) 小部件widgets yii初体验(10) 前...

  • 上手OpenCV-目录

    全部文章 第一部分 上手OpenCV_GUI-L01-处理图片 上手OpenCV_GUI-L02-视频 上手Ope...

  • opencv-学习笔记

    Opencv 官方文档: opencv cmake文件书写实例 Load and Display an Image...

  • iOS 滤镜效果

    综合滤镜 静态滤镜 {灰度, 颠倒, 旋涡, 马赛克, 马赛克2, 马赛克3} 动态滤镜动态滤镜效果.gif 代码...

  • 动画篇-layout动画初体验

    动画篇-layout动画初体验 动画篇-layout动画初体验

网友评论

    本文标题:openCV-初体验-马赛克

    本文链接:https://www.haomeiwen.com/subject/jeyepxtx.html