日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Swift与C++混编 OpenCV初体验 图片打码~

發(fā)布時間:2024/9/5 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swift与C++混编 OpenCV初体验 图片打码~ 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

OpenCV初體驗,給圖片打碼

提到OpenCV,相信大多數(shù)人都聽說過,應用領域非常廣泛,使用C++開發(fā),天生具有跨平臺的優(yōu)勢,我們學習一次,就可以在各個平臺使用,這個還是很具有誘惑力的。
本文主要記錄我第一次使用OpenCV,在iOS開發(fā)平臺上面搭建開發(fā)環(huán)境,并且實現(xiàn)一個簡單的馬賽克功能
開發(fā)環(huán)境:Swift4、XCode 9.0

?

1、什么是OpenCV?
* 由英特爾公司于1999年發(fā)起并參與開發(fā),至今已有18年歷史?
* OpenCV的全稱是Open Source Computer Vision Library?
* 是一個跨平臺的開源計算機視覺庫,可用于開發(fā)實時的圖像處理、計算機視覺以及模式識別程序。?
* 支持C/C++、Java、Python、OC、Swift、Ruby等等語言?
* 支持Windows、 Android、 Maemo、 FreeBSD、 OpenBSD、 iOS、 Linux和Mac OS

?

2、難點,思路
* 由于我們使用的是Swift,由于目前還不能在Swift中使用C++的類,所以我們得想一個方法,在Swift中調(diào)用C++的類?
* 其實方法很簡單,Swift天生具有跟Objective-C++混編的能力,而Objective-C++里面是可以直接使用C++的類的,上面的問題也就解決了。

?

?

3、馬賽克原理
* 其實把圖片的像素密度調(diào)低,就可以出現(xiàn)馬賽克效果了?
* 開始做馬賽克之前,需要定一個馬賽克的級別,表示原圖中每幾個像素變成新圖里面的一個像素?
* 取一小塊區(qū)域左上角的一個像素,并把這個像素填充到整個小區(qū)域內(nèi)?
* 如下圖,左邊是原圖,右邊是經(jīng)過變換之后的圖,假設馬賽克級別為3,每個數(shù)字表示的區(qū)域就是處理的一個小單元,取這個最小單元左上角的顏色,填充整個小單元就OK了

?

4、開動工程
4.1、搭建c++和swift混編環(huán)境
我們首先要搭建一個c++的環(huán)境,然后才能進行c++的開發(fā),而c++環(huán)境可以通過iostream里面的cout函數(shù)驗證
1.首先,我們使用xCode新建一個swift的iOS項目
2.在工程內(nèi),新建一個Objective-C類,繼承NSObject,這里會自動提示我們是否為項目添加橋接文件,選擇添加即可(橋接文件是用來向Swift暴露Objective-C方法的)
3.因為我們要使用Objective-C++,而把Objective-C轉(zhuǎn)成Objective-C++的方法有兩種
* 把.m文件的后綴名改為.mm,xCode就會自動識別我們的代碼為Objective-C++了(xCode會通過后綴名自動識別源文件類型)?
* 選中要修改的.m文件,在右邊的Type屬性修改成:Objective-C++ Source(也可以手動指定源文件類型)

?

?

4.在剛才的.mm文件中,添加一個測試方法,在這里測試一下C++環(huán)境是否搭建成功

?

1 #import "MyUtil.h" 2 #import <iostream> 3 using namespace std; 4 @implementation MyUtil 5 + (void)testCpp { 6 cout << "Hello Swift and Cpp" << endl; 7 }

5.在前面xCode自動創(chuàng)建的橋接文件中暴漏我們的測試方法頭文件

6.在Swift中調(diào)用測試方法,控制臺輸出 "Hello Swift and Cpp" 就正常了

4.2、導入OpenCV動態(tài)庫

在iOS開發(fā)中導入OpenCV的庫很簡單,去官網(wǎng)下載我們需要的framework拖拽到工程文件或者用cocopods導下載即可

4.3、實現(xiàn)馬賽克函數(shù)

下面進入正題

1.首先在.mm文件中 ,導入OpenCV的頭文件,導入頭文件之后代碼如下,這里有幾個坑要注意:

  • 不要在.h文件中去導入OpenCV的相關頭文件,否則會報錯,錯誤信息: Core.hpp header must be compiled as C++,看到這個問題,趕緊把頭文件移動到.m文件中去

  • 還有就是OpenCV的頭文件最好放在#import之前,否則也會報一個錯誤: enum { NO, FEATHER, MULTI_BAND }; Expected identifier

?

1 // 倒入OpenCV框架 最好放在Foundation.h UIKit.h之前 2 // 核心頭文件 3 #import <opencv2/opencv.hpp> 4 // 對iOS支持 5 #import <opencv2/imgcodecs/ios.h> 6 // 倒入矩陣幫助類 7 #import <opencv2/highgui.hpp> 8 #import <opencv2/core/types.hpp> 9 10 #import "MyUntil.h" 11 #import <iostream> 12 using namespace std; 13 using namespace cv;

2.實現(xiàn)馬賽克函數(shù)

1 +(UIImage *)opencvimage:(UIImage *)image level:(int)level{ 2 // 實現(xiàn)功能 3 // 第一步:將iOS圖片->OpenCV圖片(Mat矩陣) 4 Mat mat_image_src; 5 UIImageToMat(image, mat_image_src); 6 7 // 第二步:確定高度 8 int width = mat_image_src.cols; 9 int height = mat_image_src.rows; 10 11 // 在OpenCV里面,必須要先把ARGB的顏色空間轉(zhuǎn)換成RGB,否則處理會失敗 12 // ARGB->RGB 13 Mat mat_image_dst; 14 cvtColor(mat_image_src, mat_image_dst, CV_RGBA2BGR, 3); 15 // 為了不影響原始圖片,克隆一張保存 16 Mat mat_image_clone = mat_image_dst.clone(); 17 18 //第三步:馬賽克處理 19 int xMax = width - level; 20 int yMax = height - level; 21 for (int y = 0; y <= yMax; y += level) { 22 for (int x = 0; x <= xMax; x += level) { 23 // 讓整個巨型區(qū)域顏色值保持一致 24 // mat_image_clone.at<Vec3d>(i, j)->像素點(顏色值組成->多個)->ARGB->數(shù)組 25 // mat_image_clone.at<Vec3d>(i, j)[0]->R值 26 // mat_image_clone.at<Vec3d>(i, j)[1]->G值 27 // mat_image_clone.at<Vec3d>(i, j)[2]->B值 28 Scalar scalar = Scalar(mat_image_clone.at<Vec3b>(y, x)[0], 29 mat_image_clone.at<Vec3b>(y, x)[1], 30 mat_image_clone.at<Vec3b>(y, x)[2]); 31 //取出要處理的矩形區(qū)域 32 Rect2i mosaicRect = Rect2i(x, y, level, level); 33 Mat roi = mat_image_dst(mosaicRect); 34 35 //將前面處理的小區(qū)域拷貝到要處理的區(qū)域 36 //CV_8UC3的含義 37 //CV_:表示框架命名空間 38 //8表示:32位色->ARGB->8位 = 1字節(jié) -> 4個字節(jié) 39 //U: 無符號類型 40 //C分析:char類型 41 //3表示:3個通道->RGB 42 Mat roiCopy = Mat(mosaicRect.size(), CV_8UC3, scalar); 43 roiCopy.copyTo(roi); 44 45 } 46 } 47 // 第四步:將OpenCV圖片->iOS圖片 48 return MatToUIImage(mat_image_dst); 49 }

4.4、在swift中調(diào)用馬賽克函數(shù)

函數(shù)已經(jīng)實現(xiàn)了,接下來就是在Swift中調(diào)用了

?1.為了便于測試,我們在storyboard中搭一個簡單的界面,在按鈕中切換馬賽克圖片和原圖,界面如下:

2.在按鈕點擊事件中調(diào)用上面的馬賽克函數(shù)即可

1 @IBAction func origImageAction(_ sender: UIButton) { 2 // 顯示原圖點擊事件 3 _imageView.image = UIImage.init(named: "bgview") 4 } 5 6 @IBAction func mosaicImageAction(_ sender: UIButton) { 7 // 打碼 8 /** 9 + (UIImage *)opencvimage:(UIImage *)image level:(int)level; 10 實現(xiàn)馬賽克功能函數(shù) 11 @param image 要處理的圖片 12 @param level 馬賽克等級,越大越模糊 13 @return 處理好的圖片 14 */ 15 _imageView.image = MyUntil.opencvimage(_imageView.image, level: 5) 16 }

3.效果如下

5、后記

對OpenCV的探索還將繼續(xù),不斷積累,貴在點滴~

轉(zhuǎn)載于:https://www.cnblogs.com/zsc1993/p/7792364.html

總結(jié)

以上是生活随笔為你收集整理的Swift与C++混编 OpenCV初体验 图片打码~的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 怡红院成人在线 | 99ri视频| 久久撸视频 | 天天躁日日躁狠狠躁免费麻豆 | 夜夜爽av| 日本a级网站 | 人妻丰满熟妇无码区免费 | 蜜臀人妻四季av一区二区不卡 | 大陆一级片 | 久久精品国产亚洲av嫖农村妇女 | 男生插女生的视频 | 相亲对象是问题学生动漫免费观看 | 国产淫语对白 | 色中色av | 人妻一区二区三区四区五区 | 97色涩| 欧美美女性生活 | 黄色网日本 | 一区二区三区视频免费 | 日本猛少妇色xxxxx | 亚洲天堂伊人网 | 欧美成人精品激情在线视频 | 性欧美lx╳lx╳ | 久久久国产网站 | 国产网站视频 | 日本欧美www | 青青视频免费看 | 欧美日韩一区二区三区在线视频 | 成人久久久久久 | 日本高潮视频 | 欧美中文一区 | 欧美三日本三级少妇三级99观看视频 | 午夜成人免费视频 | 中日韩免费视频 | 成人精品在线视频 | 99久热在线精品996热是什么 | 久久99精品久久久久久 | 69性视频 | 欧美一区二三区 | 蜜桃网站| 无码人妻精品一区二区蜜桃色欲 | 欧美性猛交bbbbb精品 | 男人添女人下部高潮全视频 | 免费色网 | 久久密av | 久久日本视频 | 国内精品卡一卡二卡三 | 麻豆传媒在线观看视频 | 日韩精品免费在线视频 | av官网| av在线二区 | 欧美精品乱码99久久蜜桃 | 午夜亚洲一区 | xxxxx色| 天堂中文8 | 亚洲熟妇毛茸茸 | 国产婷婷一区二区三区久久 | 日韩av高清在线播放 | 精品人妻一区二区三区日产 | 婷婷色在线 | 又色又爽又黄18网站 | av网址在线看 | 国产成人综合在线视频 | 被扒开腿一边憋尿一边惩罚 | 黄频在线播放 | 尤物视频在线观看国产 | 色综合久久精品亚洲国产 | 国产精品免费久久久久 | 免费福利小视频 | 国产三级播放 | 一级大片视频 | 成人免费网址 | 手机在线观看av网站 | 18岁成年人网站 | 男女男精品视频 | 亚洲精品视频免费观看 | 日韩无遮挡 | 番号动态图 | 69精品一区二区 | 在线视频播放大全 | 自拍偷拍视频在线 | 国产成人a v | 巨乳动漫美女 | 日韩中文字幕亚洲精品欧美 | 日韩av在线第一页 | 北条麻妃一区二区三区在线观看 | 香港日本韩国三级网站 | 日韩中文一区二区 | www日本免费 | 色精品视频 | 国产精品天美传媒 | 精品国产免费人成在线观看 | www.日| 黄色av免费在线看 | 日日躁夜夜躁aaaabbbb | 久久老司机 | 黄色一级黄色片 | 中文字幕第八页 | 日韩国产欧美在线视频 |