第一部分:
由於android下攝像頭預覽資料只能 imageformat.
nv21 格式的,所以解碼時要經過一翻周折.
camera mcamera = camera.open();
camera.parameters p = mcamera.getparameters();
p.setpreviewformat(imageformat.nv21);
/*這是唯一值,也可以不設定。有些同學可能設定成 pixelformat 下面的乙個值,其實是不對的,具體的可以看官方文件*/
mcamera.setparameters(p);
mcamera.startpreview();
下面是解碼核心部分:
@override
public void onpreviewframe(byte data, camera camera)
}catch(exception ex)
}
**很簡單。就是把yuv資料轉成 bitmap 就行了,系統提供 yuvimage 類。
第二部分:
拆分成位圖,然後對位圖進行處理和識別
當然,手機必須得有攝像頭
然後嘛,第一步是在androidmanifest.xml加入如下許可權宣告
<permission
android
:name="android.permission.camera"
>
permission
>
<
uses-permission
android
:name="android.permission.camera"
/>
<
uses-feature
android
:name="android.hardware.camera"
/>
<
uses-feature
android
:name="android.hardware.camera.autofocus"
/>
攝像頭的預覽和捕獲只能通過su***ceview..
而且他的工作模式必須是su***ceholder.su***ce_type_push_buffers
不然不能在su***ceview裡面顯示出預覽的影象
然後在su***cecreated方法裡面加入我們的攝像頭初始化
publicvoid su***cecreated(su***ceholder arg0) catch (exception e)
}
然後看看我們的viewcallback類
在這個類裡面要實現previewcallback
主要是裡面的 public void onpreviewframe(byte data, camera arg1) {}
data就是返回的資料流了, 不過麻煩的是這個流並不是rgb編碼的,是yuv420sp編碼的,
camera.parameters 裡面有個setpreviewformat() 這個雖然可以設定 但是具體能不能編碼成jpeg是受你的手機影響的
老老實實得解碼吧...網上關於yuv420sp編碼的內容相當相當少..
staticpublic
void decodeyuv420sp(byte rgbbuf, byte yuv420sp, int width, int height)
y1192 = 1192 * y;
r = (y1192 + 1634 * v);
g = (y1192 - 833 * v - 400 * u);
b = (y1192 + 2066 * u);
if (r < 0) r = 0; else
if (r > 262143) r = 262143;
if (g < 0) g = 0; else
if (g > 262143) g = 262143;
if (b < 0) b = 0; else
if (b > 262143) b = 262143;
rgbbuf[yp * 3] = (byte)(r >> 10);
rgbbuf[yp * 3 + 1] = (byte)(g >> 10);
rgbbuf[yp * 3 + 2] = (byte)(b >> 10);}}
}
具體怎麼實現的我就不是很清楚了..好像是灰度在前面 然後把藍色和青色混合成乙個變數跟在後面..
但是呢.這個方法效率很低..特別是些cpu差的機器
可以數數..每次都是橫向*縱向 演算法複雜度挺高的..
然後我把他壓縮了10倍..就是每隔10個點取一次,效率瞬間就上來了.
現在執行你的程式, 你可能會發現攝像頭的樣子很奇怪。
其實是因為螢幕方向的問題
把你的螢幕設定為永久橫向即可
this.setrequestedorientation(activityinfo.screen_orientation_landscape);//覆蓋螢幕 不顯示通知欄
this.requestwindowfeature(window.feature_no_title);
getwindow().setflags(windowmanager.layoutparams.type_status_bar, windowmanager.layoutpar
Android 呼叫攝像頭
androidmanifest新增許可權 intent呼叫開啟照相機 intent intent new intent mediastore.action image capture file file new file environment.getexternalstoragedirectory...
Opencv Python 顯示攝像頭的幀
import cv2 cameracapture cv2.videocapture 0 獲取滑鼠指令 clicked false def onmouse event,x,y,flags,param global clicked if event cv2.event lbuttonup 滑鼠左鍵鬆開 ...
Android開發之攝像頭
通過以下函式來獲得手機支援的picture和preview的大小 選擇合適的預覽尺寸 listsizelist parameters.getsupportedpreviewsizes 如果sizelist只有乙個我們也沒有必要做什麼了,因為就他乙個別無選擇 if sizelist.size 1 i9...