OpenCV 轉(zhuǎn)成輪廓圖

引用自:
http://www.itdecent.cn/p/b398da410451

因?yàn)镺penCV是用C++編寫的,所以只能用.mm來使用,然后再用bridging-header.h來轉(zhuǎn)到swift里來使用。

文件

OpenCVUtil.h

#import <Foundation/Foundation.h>

@class UIImage;
@interface OpenCVUtil : NSObject

+(UIImage *) convertImage:(UIImage *)image;

@end

OpenCVUtil.mm

//下面的#ifdef只能放在上面,如果放在#import "OpenCVUtil.h"下面就出錯(cuò)。
#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#import <opencv2/imgproc/types_c.h>
#import <opencv2/imgcodecs/ios.h>
#endif

#import "OpenCVUtil.h"

using namespace cv;

@implementation OpenCVUtil

+(UIImage *) convertImage:(UIImage *)image{
    Mat cvImage;
    UIImageToMat(image, cvImage);
    
    if (!cvImage.empty()) {
        Mat gray;
        
        //將圖像轉(zhuǎn)成灰度顯示
        cvtColor(cvImage, gray, CV_RGB2GRAY);
        //應(yīng)用高斯濾波器出除小的邊緣
        GaussianBlur(gray, gray, cv::Size(5,5), 1.2,1.2);
        //計(jì)算與畫布輪廓
        Mat edges;
        Canny(gray, edges, 0, 50);

        //使用白色填充
        cvImage.setTo(Scalar::all(100));
        //修改輪廓顏色 scalar 四個(gè)屬性分別是R G B Alpha
        cvImage.setTo(Scalar(255,0,225,255),edges);
        //將Mat轉(zhuǎn)換成UIImageView
        return MatToUIImage(cvImage);

        //用gray來轉(zhuǎn)出UIImage,只能得到灰度圖,不像上面的可以用彩色。
//        gray.setTo(Scalar::all(225));
//        gray.setTo(Scalar(0,255,0,255),edges);
//        return MatToUIImage(gray);
    }
    return nil;
}
@end

HumanFaceRecognition-Bridging-Header.h

#import "OpenCVUtil.h"

ViewController.swift


import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let image = OpenCVUtil.convert(#imageLiteral(resourceName: "circle"))
        let iv = UIImageView(image: image)
        iv.frame.origin = CGPoint(x: 20, y: 20)
        iv.frame.size = CGSize(width: 200, height: 200)
        view.addSubview(iv)
    }
}

結(jié)果:

原圖
處理后的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容