1. 程式人生 > >直接獲取攝像頭傳回的影象資料(人臉、微笑、眨眼: 識別-->第一步):影象識別第一步

直接獲取攝像頭傳回的影象資料(人臉、微笑、眨眼: 識別-->第一步):影象識別第一步

轉:ios通過攝像頭獲取特定資料(http://www.2cto.com/kf/201404/290777.html)

註釋: 由於最近專案需求,需要一個能夠實現對攝像頭圖片獲取其中部分內容的功能,類似於二維碼掃描。但是隻需要獲取特定位置的畫素塊進行簡單計算即可,所以聽上去還是很簡單的,但是經過實踐,發現,現實似乎與想象中不一樣,由於攝像頭拍到的資料,採用的是QZ(也就是CG框架)進行繪製,所以涉及到座標系與frame的座標系不一致的問題。 
1:嘗試直接拿到攝像頭資料,先輸出看下。 code: 程式碼略。 
總結: 直接使用攝像頭資料再用imageView的方式顯示出來的時刻,我們發現,資料是正確的==。所見即所得的方式。 需要注意的是: 當圖片是橫向拍攝的時刻,我們可以看到,相機會自動將圖片進行90度旋轉,也就是說,
系統在你橫向拍攝的時刻,會自動將圖片旋轉90度,滿足你正常情況下的觀看。 
所以: 我們使用imageView對拿到的資料進行展示的時刻,資料並沒有顛倒的現象。為了防止出現這個現象的原因是出於imageView的內部實現,我們使用CgimageRef的方式,再次驗證 從攝像頭拿到的資料真的和我們所看到的一樣嗎? 
code:

CGImageRef oldImageRef=image.CGImage;

UIImage* newImage=[UIImage imageWithCGImage:oldImageRef];

註釋: 
在這裡,我們只是對拿到的Image物件,先轉換成了CGimage,再使用UIImage的方法得到新的Image物件。 

結果:我們發現,得到的影象果然就是旋轉90度的圖片,而不再是原圖了。

UIImage* newImage=[UIImage imageWithCGImage:oldImageRef scale:.1 orientation:UIImageOrientationRight];

使用上面的語句,可以將影象旋轉90度變成我們需要的樣子。 

思考: 
這麼簡單的變化中,圖片會不會丟失資料? ---------

NSData* data=UIImageJPEGRepresentation(image, 0);

NSLog(@"%lu",(unsigned long)data.length);

\
還好,資料沒有丟失。既然資料沒有丟失,那麼我們應該可以獲取到其中特定的一塊資料得出,再顯示出來才對。 
問題來了: 我們要獲取某一塊資料的內容,我們應該怎麼傳遞rect呢?因為我們預設的rect與CG的座標系並不同。是否需要轉換呢? 



1:我們先試一下,先把資料轉過來,再從裡面拿一部分. code:

CGImageRef imageRef=image.CGImage;

CGImageRef newimage=CGImageCreateWithImageInRect(imageRef, rect);


結果發現: 拿到的資料還是傾斜了90度。也就是說,我們上面對資料這樣的轉換其實根本沒有起到作用,資料在底層儲存的方式就是使用CG的座標系儲存的。 
經過試驗發現,[UIImage imageWithCGImage:oldImageRef scale:.1 orientation:UIImageOrientationRight]中,對orientation的改變,不會對我們的實驗結果產生任何影響。 也就是說,這個方法,其實並沒有對底層的資料進行操作,而只不過是在初始化新的UIImage的時刻,對底層畫素的讀取,orientation不同,方向也不同而已。 
思考: 
因為,我們使用上面的方法,並沒有操作到底層的畫素矩陣,也就是我,我們如果想要解決這個問題,有兩種方式, 1:將底層資料矩陣轉換成我們需要的對應座標系的內容。 這也就是CTM轉換。 將Image物件內部資料進行轉換。 code: ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 - (UIImage *)image:(UIImage *)image rotation:(UIImageOrientation)orientation { longdoublerotate = 0.0; CGRect rect; floattranslateX = 0; floattranslateY = 0; floatscaleX =

相關推薦

直接獲取攝像頭傳回影象資料人臉微笑眨眼 識別-->第一影象識別第一

轉:ios通過攝像頭獲取特定資料(http://www.2cto.com/kf/201404/290777.html) 註釋: 由於最近專案需求,需要一個能夠實現對攝像頭圖片獲取其中部分內容的功能,類似於二維碼掃描。但是隻需要獲取特定位置的畫素塊進行簡單計算即可

IOS4直接獲取攝像頭資料

需要新增的framework:CoreMedia,CoreVideo,QuartzCore,AVFoundation MyAVController.h: 1 2 3 4 5 6 7 8 9

使用ffmpeg 3.3+sdl 2.0 不能直接獲取攝像頭的原因

本文主要是下面這個連結的補充https://blog.csdn.net/leixiaohua1020/article/details/39702113 avdevice_register_all (); avformat_network_init (); av_register_all ();

android獲取攝像頭視訊幀資料

1.思路 一.通過android的Camera.setPreviewCallback(PreviewCallback cb)監聽回撥. 二.此回撥函式public void onPreviewFrame(byte[] data, Camera camera)每回調一次就是

根據影象名字把一個大資料夾中影象分類matlab中for迴圈中巢狀if語句

clear; close all; clc; inpath = 'G:\code\xianzhu\Z_CODE\SalBenchmark-master\Data\DataSet1\Saliency\*.png'; %%需要分類的資料夾路徑 %%分類後圖像儲存路徑%% CA_p

elementUI tree元件獲取當前選擇所有資料含半選中的父節點陣列

  網上查了半天,一大堆都說要改原始碼的,最後發現有方法不用改原始碼的 獲取方法如下 this.$refs.tree.getCheckedKeys().concat(this.$refs.tree.getHalfCheckedKeys()) 將getCheckedKey

java獲取json中的資料帶需要的jar包

JSONObject和JSONArray JSONObject物件一般表現為:{"id":"1","name":"張三"} JSONArray是JSONObject的陣列格式,由中括號[]包裹,表現為: [{"userid":"1","name":"張三"},{"use

微信小程式聯盟微信小程式之獲取並解密使用者資料獲取openIdunionId

前言在實際的小程式開發中,往往需要使用者授權登陸並獲取使用者的資料,快速對接使用者系統。openId : 使用者在當前小程式的唯一標識 unionId : 如果開發者擁有多個移動應用、網站應用、和公眾帳號(包括小程式),可通過unionid來區分使用者的唯一性,因為只要是同一

TCP/UDP傳輸攝像頭採集的資料opencv

server 本部落格是一個伺服器和客戶端的程式,可以直接用vs建立2個工程,複製下面程式碼,替代main函式,前提要配好opencv庫,還要在客戶端有攝像頭,本部落格是用TCP傳輸實現,(Tcp對包的資料大小沒有限制)雖然封裝了UDP 的介面,但是udp最

QT中用socket接收影象資料JPEG後立即解碼顯示

最近在做一個小程式,功能很簡單,就是從socket傳回jpeg格式的資料,然後在本機上顯示出來,當然這個過程並沒有儲存收到的資料後再顯示,而是收到資料後馬上顯示。 這裡採用了OPENCV中的解碼函式: imdecode(); 這個函式的用法比較煩,但也不復雜,如下: 這是一

vue-cli專案如何使用vue-resource獲取本地的json資料模擬服務端返回資料

最近使用vue-cli做了一個小小的專案,在專案中需要使用vue-resource來與後臺進行資料互動,所以我使用了本地json資料來模仿後臺獲取資料的流程。至於vue-resource的安裝和json的準備我就不贅述了、、、 下面是操作方法: 1、首先介紹

從resource中的raw資料夾中獲取檔案並讀取資料資原始檔只能讀不能寫

轉載:http://blog.sina.com.cn/s/blog_4d25c9870100qpax.html 一、 從resource中的raw資料夾中獲取檔案並讀取資料(資原始檔只能讀不能寫) String res = ""; try{ InputStre

JAVA微信小程式之獲取並解密使用者資料獲取openIdunionId

前言在實際的小程式開發中,往往需要使用者授權登陸並獲取使用者的資料,快速對接使用者系統。openId : 使用者在當前小程式的唯一標識unionId : 如果開發者擁有多個移動應用、網站應用、和公眾帳號(包括小程式),可通過unionid來區分使用者的唯一性,因為只要是同一個微信開放平臺帳號下的移動應用、網站

ibatis 獲取表格條數countibatis對於測試校驗資料是個好東西

校驗list好麻煩,校驗條數還是比較方便的,也比較有用。 1、定義資料訪問介面dao publicint countAll(); 2、建立MyBatis對映檔案(UserDaoMapper.xml)mapping <select id="countAll"

Spring cache資料三。註釋驅動的 Spring cache 快取介紹

概述 Spring 3.1 引入了激動人心的基於註釋(annotation)的快取(cache)技術,它本質上不是一個具體的快取實現方案(例如 EHCache 或者 OSCache),而是一個對快取使用的抽象,通過在既有程式碼中新增少量它定義的各種 annotation,即能夠達到快取

零基礎學習大資料同樣適合有一定基礎想進階的

前大資料行業異常火爆,不少人都對大資料充滿了興趣,其中有大部分人都是之前沒有接觸過計算機技術的,對程式語言也不太瞭解,那是不是這部分零基礎的朋友就學不了大資料了呢?答案當然是否定的。大資料學習並不是高深莫測的,雖然它並沒有多簡單,但是通過努力,零基礎的朋友也是完全可以掌握大資

java程式碼中得到本地ip地址。獲取客戶端請求IP終端使用者的網際網路或內網IP地址

 private static String getLocalIP() throws Exception{    String localIP = "";    InetAddress addr = (InetAddress) InetAddress.getLocalHos

windows 下 Tensorboard 無法顯示資料No dashboards are active for the current data set

問題 No dashboards are active for the current data set 原因及解決 通常是由於執行命令時,指向的路徑存在問題,因此這裡建議採用以下

spark讀取redis資料互動式,scala單機版,java單機版

互動式 第一步:向redis中新增資料 第二步:將jedis jar包放入~/lib目錄下,開啟spark服務 第三步:通過spark-shell讀取redis資料,並做相應處理

資料HBase-應用場景原理與基本架構

Hbase概述      HBase是一個構建在HDFS上的分散式列儲存系統;