Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
fae67e0b
O
Opencv
项目概览
Greenplum
/
Opencv
11 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fae67e0b
编写于
7月 15, 2011
作者:
A
Andrey Kamaev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Refactored Android samples
上级
72a55a41
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
514 addition
and
390 deletion
+514
-390
samples/android/0-base/src/org/opencv/samples/s0/Sample0Base.java
...android/0-base/src/org/opencv/samples/s0/Sample0Base.java
+14
-7
samples/android/0-base/src/org/opencv/samples/s0/Sample0View.java
...android/0-base/src/org/opencv/samples/s0/Sample0View.java
+31
-118
samples/android/0-base/src/org/opencv/samples/s0/SampleViewBase.java
...roid/0-base/src/org/opencv/samples/s0/SampleViewBase.java
+119
-0
samples/android/1-java/src/org/opencv/samples/s1/Sample1View.java
...android/1-java/src/org/opencv/samples/s1/Sample1View.java
+4
-4
samples/android/2-native/src/org/opencv/samples/s2/Sample2Native.java
...oid/2-native/src/org/opencv/samples/s2/Sample2Native.java
+8
-0
samples/android/2-native/src/org/opencv/samples/s2/Sample2View.java
...droid/2-native/src/org/opencv/samples/s2/Sample2View.java
+9
-94
samples/android/2-native/src/org/opencv/samples/s2/SampleViewBase.java
...id/2-native/src/org/opencv/samples/s2/SampleViewBase.java
+119
-0
samples/android/4-mixed/src/org/opencv/samples/s4/Sample4Mixed.java
...droid/4-mixed/src/org/opencv/samples/s4/Sample4Mixed.java
+24
-19
samples/android/4-mixed/src/org/opencv/samples/s4/Sample4View.java
...ndroid/4-mixed/src/org/opencv/samples/s4/Sample4View.java
+67
-148
samples/android/4-mixed/src/org/opencv/samples/s4/SampleViewBase.java
...oid/4-mixed/src/org/opencv/samples/s4/SampleViewBase.java
+119
-0
未找到文件。
samples/android/0-base/src/org/opencv/samples/s0/Sample0Base.java
浏览文件 @
fae67e0b
...
...
@@ -8,31 +8,38 @@ import android.view.MenuItem;
import
android.view.Window
;
public
class
Sample0Base
extends
Activity
{
private
static
final
String
TAG
=
"Sample0Bas
e::Activity"
;
private
static
final
String
TAG
=
"Sampl
e::Activity"
;
public
static
final
int
VIEW_MODE_RGBA
=
0
;
public
static
final
int
VIEW_MODE_GRAY
=
1
;
public
static
final
int
VIEW_MODE_RGBA
=
0
;
public
static
final
int
VIEW_MODE_GRAY
=
1
;
private
MenuItem
mItemPreviewRGBA
;
private
MenuItem
mItemPreviewGray
;
private
MenuItem
mItemPreviewRGBA
;
private
MenuItem
mItemPreviewGray
;
public
int
viewMode
;
public
static
int
viewMode
=
VIEW_MODE_RGBA
;
public
Sample0Base
()
{
Log
.
i
(
TAG
,
"Instantiated new "
+
this
.
getClass
());
}
/** Called when the activity is first created. */
@Override
public
void
onCreate
(
Bundle
savedInstanceState
)
{
Log
.
i
(
TAG
,
"onCreate"
);
super
.
onCreate
(
savedInstanceState
);
requestWindowFeature
(
Window
.
FEATURE_NO_TITLE
);
setContentView
(
new
Sample0View
(
this
));
viewMode
=
VIEW_MODE_RGBA
;
}
@Override
public
boolean
onCreateOptionsMenu
(
Menu
menu
)
{
Log
.
i
(
TAG
,
"onCreateOptionsMenu"
);
mItemPreviewRGBA
=
menu
.
add
(
"Preview RGBA"
);
mItemPreviewGray
=
menu
.
add
(
"Preview GRAY"
);
return
true
;
}
@Override
public
boolean
onOptionsItemSelected
(
MenuItem
item
)
{
Log
.
i
(
TAG
,
"Menu Item selected "
+
item
);
if
(
item
==
mItemPreviewRGBA
)
...
...
samples/android/0-base/src/org/opencv/samples/s0/Sample0View.java
浏览文件 @
fae67e0b
...
...
@@ -2,132 +2,45 @@ package org.opencv.samples.s0;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.Canvas
;
import
android.hardware.Camera
;
import
android.hardware.Camera.PreviewCallback
;
import
android.util.Log
;
import
android.view.SurfaceHolder
;
import
android.view.SurfaceView
;
import
java.util.List
;
class
Sample0View
extends
SurfaceView
implements
SurfaceHolder
.
Callback
,
Runnable
{
private
static
final
String
TAG
=
"Sample0Base::View"
;
private
Camera
mCamera
;
private
SurfaceHolder
mHolder
;
private
int
mFrameWidth
;
private
int
mFrameHeight
;
private
byte
[]
mFrame
;
private
boolean
mThreadRun
;
class
Sample0View
extends
SampleViewBase
{
public
Sample0View
(
Context
context
)
{
super
(
context
);
mHolder
=
getHolder
();
mHolder
.
addCallback
(
this
);
}
public
void
surfaceChanged
(
SurfaceHolder
_holder
,
int
format
,
int
width
,
int
height
)
{
if
(
mCamera
!=
null
)
{
Camera
.
Parameters
params
=
mCamera
.
getParameters
();
List
<
Camera
.
Size
>
sizes
=
params
.
getSupportedPreviewSizes
();
mFrameWidth
=
width
;
mFrameHeight
=
height
;
//selecting optimal camera preview size
{
double
minDiff
=
Double
.
MAX_VALUE
;
for
(
Camera
.
Size
size
:
sizes
)
{
if
(
Math
.
abs
(
size
.
height
-
height
)
<
minDiff
)
{
mFrameWidth
=
size
.
width
;
mFrameHeight
=
size
.
height
;
minDiff
=
Math
.
abs
(
size
.
height
-
height
);
}
}
}
params
.
setPreviewSize
(
mFrameWidth
,
mFrameHeight
);
mCamera
.
setParameters
(
params
);
mCamera
.
startPreview
();
}
}
public
void
surfaceCreated
(
SurfaceHolder
holder
)
{
mCamera
=
Camera
.
open
();
mCamera
.
setPreviewCallback
(
new
PreviewCallback
()
{
public
void
onPreviewFrame
(
byte
[]
data
,
Camera
camera
)
{
synchronized
(
Sample0View
.
this
)
{
mFrame
=
data
;
Sample0View
.
this
.
notify
();
}
}
}
);
(
new
Thread
(
this
)).
start
();
}
public
void
surfaceDestroyed
(
SurfaceHolder
holder
)
{
mThreadRun
=
false
;
if
(
mCamera
!=
null
)
{
synchronized
(
Sample0View
.
this
)
{
mCamera
.
stopPreview
();
mCamera
.
setPreviewCallback
(
null
);
mCamera
.
release
();
mCamera
=
null
;
}
}
}
@Override
protected
Bitmap
processFrame
(
byte
[]
data
)
{
int
frameSize
=
getFrameWidth
()
*
getFrameHeight
();
int
[]
rgba
=
new
int
[
frameSize
];
public
void
run
()
{
mThreadRun
=
true
;
Log
.
i
(
TAG
,
"Starting thread"
);
while
(
mThreadRun
)
{
byte
[]
data
=
null
;
synchronized
(
this
)
{
try
{
this
.
wait
();
data
=
mFrame
;
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
int
view_mode
=
Sample0Base
.
viewMode
;
if
(
view_mode
==
Sample0Base
.
VIEW_MODE_GRAY
)
{
for
(
int
i
=
0
;
i
<
frameSize
;
i
++)
{
int
y
=
(
0xff
&
((
int
)
data
[
i
]));
rgba
[
i
]
=
0xff000000
+
(
y
<<
16
)
+
(
y
<<
8
)
+
y
;
}
int
frameSize
=
mFrameWidth
*
mFrameHeight
;
int
[]
rgba
=
new
int
[
frameSize
];
Sample0Base
a
=
(
Sample0Base
)
getContext
();
int
view_mode
=
a
.
viewMode
;
if
(
view_mode
==
Sample0Base
.
VIEW_MODE_GRAY
)
{
for
(
int
i
=
0
;
i
<
frameSize
;
i
++)
{
int
y
=
(
0xff
&
((
int
)
data
[
i
]));
rgba
[
i
]
=
0xff000000
+
(
y
<<
16
)
+
(
y
<<
8
)
+
y
;
}
else
if
(
view_mode
==
Sample0Base
.
VIEW_MODE_RGBA
)
{
for
(
int
i
=
0
;
i
<
getFrameHeight
();
i
++)
for
(
int
j
=
0
;
j
<
getFrameWidth
();
j
++)
{
int
y
=
(
0xff
&
((
int
)
data
[
i
*
getFrameWidth
()
+
j
]));
int
u
=
(
0xff
&
((
int
)
data
[
frameSize
+
(
i
>>
1
)
*
getFrameWidth
()
+
(
j
&
~
1
)
+
0
]));
int
v
=
(
0xff
&
((
int
)
data
[
frameSize
+
(
i
>>
1
)
*
getFrameWidth
()
+
(
j
&
~
1
)
+
1
]));
y
=
y
<
16
?
16
:
y
;
int
r
=
Math
.
round
(
1.164f
*
(
y
-
16
)
+
1.596f
*
(
v
-
128
));
int
g
=
Math
.
round
(
1.164f
*
(
y
-
16
)
-
0.813f
*
(
v
-
128
)
-
0.391f
*
(
u
-
128
));
int
b
=
Math
.
round
(
1.164f
*
(
y
-
16
)
+
2.018f
*
(
u
-
128
));
r
=
r
<
0
?
0
:
(
r
>
255
?
255
:
r
);
g
=
g
<
0
?
0
:
(
g
>
255
?
255
:
g
);
b
=
b
<
0
?
0
:
(
b
>
255
?
255
:
b
);
rgba
[
i
*
getFrameWidth
()
+
j
]
=
0xff000000
+
(
b
<<
16
)
+
(
g
<<
8
)
+
r
;
}
}
else
if
(
view_mode
==
Sample0Base
.
VIEW_MODE_RGBA
)
{
for
(
int
i
=
0
;
i
<
mFrameHeight
;
i
++)
for
(
int
j
=
0
;
j
<
mFrameWidth
;
j
++)
{
int
y
=
(
0xff
&
((
int
)
data
[
i
*
mFrameWidth
+
j
]));
int
u
=
(
0xff
&
((
int
)
data
[
frameSize
+
(
i
>>
1
)
*
mFrameWidth
+
(
j
&
~
1
)
+
0
]));
int
v
=
(
0xff
&
((
int
)
data
[
frameSize
+
(
i
>>
1
)
*
mFrameWidth
+
(
j
&
~
1
)
+
1
]));
if
(
y
<
16
)
y
=
16
;
int
r
=
Math
.
round
(
1.164f
*
(
y
-
16
)
+
1.596f
*
(
v
-
128
)
);
int
g
=
Math
.
round
(
1.164f
*
(
y
-
16
)
-
0.813f
*
(
v
-
128
)
-
0.391f
*
(
u
-
128
));
int
b
=
Math
.
round
(
1.164f
*
(
y
-
16
)
+
2.018f
*
(
u
-
128
));
if
(
r
<
0
)
r
=
0
;
if
(
r
>
255
)
r
=
255
;
if
(
g
<
0
)
g
=
0
;
if
(
g
>
255
)
g
=
255
;
if
(
b
<
0
)
b
=
0
;
if
(
b
>
255
)
b
=
255
;
rgba
[
i
*
mFrameWidth
+
j
]
=
0xff000000
+
(
b
<<
16
)
+
(
g
<<
8
)
+
r
;
}
}
Bitmap
bmp
=
Bitmap
.
createBitmap
(
mFrameWidth
,
mFrameHeight
,
Bitmap
.
Config
.
ARGB_8888
);
bmp
.
setPixels
(
rgba
,
0
/*offset*/
,
mFrameWidth
/*stride*/
,
0
,
0
,
mFrameWidth
,
mFrameHeight
);
Canvas
canvas
=
mHolder
.
lockCanvas
();
canvas
.
drawBitmap
(
bmp
,
(
canvas
.
getWidth
()-
mFrameWidth
)/
2
,
(
canvas
.
getHeight
()-
mFrameHeight
)/
2
,
null
);
mHolder
.
unlockCanvasAndPost
(
canvas
);
}
Bitmap
bmp
=
Bitmap
.
createBitmap
(
getFrameWidth
(),
getFrameHeight
(),
Bitmap
.
Config
.
ARGB_8888
);
bmp
.
setPixels
(
rgba
,
0
/* offset */
,
getFrameWidth
()
/* stride */
,
0
,
0
,
getFrameWidth
(),
getFrameHeight
());
return
bmp
;
}
}
\ No newline at end of file
samples/android/0-base/src/org/opencv/samples/s0/SampleViewBase.java
0 → 100644
浏览文件 @
fae67e0b
package
org.opencv.samples.s0
;
import
java.util.List
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.Canvas
;
import
android.hardware.Camera
;
import
android.hardware.Camera.PreviewCallback
;
import
android.util.Log
;
import
android.view.SurfaceHolder
;
import
android.view.SurfaceView
;
public
abstract
class
SampleViewBase
extends
SurfaceView
implements
SurfaceHolder
.
Callback
,
Runnable
{
private
static
final
String
TAG
=
"Sample::SurfaceView"
;
private
Camera
mCamera
;
private
SurfaceHolder
mHolder
;
private
int
mFrameWidth
;
private
int
mFrameHeight
;
private
byte
[]
mFrame
;
private
boolean
mThreadRun
;
public
SampleViewBase
(
Context
context
)
{
super
(
context
);
mHolder
=
getHolder
();
mHolder
.
addCallback
(
this
);
Log
.
i
(
TAG
,
"Instantiated new "
+
this
.
getClass
());
}
public
int
getFrameWidth
()
{
return
mFrameWidth
;
}
public
int
getFrameHeight
()
{
return
mFrameHeight
;
}
public
void
surfaceChanged
(
SurfaceHolder
_holder
,
int
format
,
int
width
,
int
height
)
{
Log
.
i
(
TAG
,
"surfaceCreated"
);
if
(
mCamera
!=
null
)
{
Camera
.
Parameters
params
=
mCamera
.
getParameters
();
List
<
Camera
.
Size
>
sizes
=
params
.
getSupportedPreviewSizes
();
mFrameWidth
=
width
;
mFrameHeight
=
height
;
// selecting optimal camera preview size
{
double
minDiff
=
Double
.
MAX_VALUE
;
for
(
Camera
.
Size
size
:
sizes
)
{
if
(
Math
.
abs
(
size
.
height
-
height
)
<
minDiff
)
{
mFrameWidth
=
size
.
width
;
mFrameHeight
=
size
.
height
;
minDiff
=
Math
.
abs
(
size
.
height
-
height
);
}
}
}
params
.
setPreviewSize
(
getFrameWidth
(),
getFrameHeight
());
mCamera
.
setParameters
(
params
);
mCamera
.
startPreview
();
}
}
public
void
surfaceCreated
(
SurfaceHolder
holder
)
{
Log
.
i
(
TAG
,
"surfaceCreated"
);
mCamera
=
Camera
.
open
();
mCamera
.
setPreviewCallback
(
new
PreviewCallback
()
{
public
void
onPreviewFrame
(
byte
[]
data
,
Camera
camera
)
{
synchronized
(
SampleViewBase
.
this
)
{
mFrame
=
data
;
SampleViewBase
.
this
.
notify
();
}
}
});
(
new
Thread
(
this
)).
start
();
}
public
void
surfaceDestroyed
(
SurfaceHolder
holder
)
{
Log
.
i
(
TAG
,
"surfaceDestroyed"
);
mThreadRun
=
false
;
if
(
mCamera
!=
null
)
{
synchronized
(
this
)
{
mCamera
.
stopPreview
();
mCamera
.
setPreviewCallback
(
null
);
mCamera
.
release
();
mCamera
=
null
;
}
}
}
protected
abstract
Bitmap
processFrame
(
byte
[]
data
);
public
void
run
()
{
mThreadRun
=
true
;
Log
.
i
(
TAG
,
"Starting processing thread"
);
while
(
mThreadRun
)
{
Bitmap
bmp
=
null
;
synchronized
(
this
)
{
try
{
this
.
wait
();
bmp
=
processFrame
(
mFrame
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
if
(
bmp
!=
null
)
{
Canvas
canvas
=
mHolder
.
lockCanvas
();
if
(
canvas
!=
null
)
{
canvas
.
drawBitmap
(
bmp
,
(
canvas
.
getWidth
()
-
getFrameWidth
())
/
2
,
(
canvas
.
getHeight
()
-
getFrameHeight
())
/
2
,
null
);
mHolder
.
unlockCanvasAndPost
(
canvas
);
}
bmp
.
recycle
();
}
}
}
}
\ No newline at end of file
samples/android/1-java/src/org/opencv/samples/s1/Sample1View.java
浏览文件 @
fae67e0b
...
...
@@ -7,10 +7,10 @@ import android.graphics.Bitmap;
import
android.view.SurfaceHolder
;
class
Sample1View
extends
SampleViewBase
{
Mat
mYuv
;
Mat
mRgba
;
Mat
mGraySubmat
;
Mat
mIntermediateMat
;
private
Mat
mYuv
;
private
Mat
mRgba
;
private
Mat
mGraySubmat
;
private
Mat
mIntermediateMat
;
public
Sample1View
(
Context
context
)
{
super
(
context
);
...
...
samples/android/2-native/src/org/opencv/samples/s2/Sample2Native.java
浏览文件 @
fae67e0b
...
...
@@ -2,12 +2,20 @@ package org.opencv.samples.s2;
import
android.app.Activity
;
import
android.os.Bundle
;
import
android.util.Log
;
import
android.view.Window
;
public
class
Sample2Native
extends
Activity
{
private
static
final
String
TAG
=
"Sample::Activity"
;
public
Sample2Native
()
{
Log
.
i
(
TAG
,
"Instantiated new "
+
this
.
getClass
());
}
/** Called when the activity is first created. */
@Override
public
void
onCreate
(
Bundle
savedInstanceState
)
{
Log
.
i
(
TAG
,
"onCreate"
);
super
.
onCreate
(
savedInstanceState
);
requestWindowFeature
(
Window
.
FEATURE_NO_TITLE
);
setContentView
(
new
Sample2View
(
this
));
...
...
samples/android/2-native/src/org/opencv/samples/s2/Sample2View.java
浏览文件 @
fae67e0b
...
...
@@ -2,108 +2,23 @@ package org.opencv.samples.s2;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.Canvas
;
import
android.hardware.Camera
;
import
android.hardware.Camera.PreviewCallback
;
import
android.util.Log
;
import
android.view.SurfaceHolder
;
import
android.view.SurfaceView
;
import
java.util.List
;
class
Sample2View
extends
SampleViewBase
{
class
Sample2View
extends
SurfaceView
implements
SurfaceHolder
.
Callback
,
Runnable
{
private
static
final
String
TAG
=
"Sample2Native::View"
;
private
Camera
mCamera
;
private
SurfaceHolder
mHolder
;
private
int
mFrameWidth
;
private
int
mFrameHeight
;
private
byte
[]
mFrame
;
private
boolean
mThreadRun
;
public
Sample2View
(
Context
context
)
{
super
(
context
);
mHolder
=
getHolder
();
mHolder
.
addCallback
(
this
);
}
public
void
surfaceChanged
(
SurfaceHolder
_holder
,
int
format
,
int
width
,
int
height
)
{
if
(
mCamera
!=
null
)
{
Camera
.
Parameters
params
=
mCamera
.
getParameters
();
List
<
Camera
.
Size
>
sizes
=
params
.
getSupportedPreviewSizes
();
mFrameWidth
=
width
;
mFrameHeight
=
height
;
//selecting optimal camera preview size
{
double
minDiff
=
Double
.
MAX_VALUE
;
for
(
Camera
.
Size
size
:
sizes
)
{
if
(
Math
.
abs
(
size
.
height
-
height
)
<
minDiff
)
{
mFrameWidth
=
size
.
width
;
mFrameHeight
=
size
.
height
;
minDiff
=
Math
.
abs
(
size
.
height
-
height
);
}
}
}
params
.
setPreviewSize
(
mFrameWidth
,
mFrameHeight
);
mCamera
.
setParameters
(
params
);
mCamera
.
startPreview
();
}
}
public
void
surfaceCreated
(
SurfaceHolder
holder
)
{
mCamera
=
Camera
.
open
();
mCamera
.
setPreviewCallback
(
new
PreviewCallback
()
{
public
void
onPreviewFrame
(
byte
[]
data
,
Camera
camera
)
{
synchronized
(
Sample2View
.
this
)
{
mFrame
=
data
;
Sample2View
.
this
.
notify
();
}
}
}
);
(
new
Thread
(
this
)).
start
();
}
@Override
protected
Bitmap
processFrame
(
byte
[]
data
)
{
int
frameSize
=
getFrameWidth
()
*
getFrameHeight
();
int
[]
rgba
=
new
int
[
frameSize
];
public
void
surfaceDestroyed
(
SurfaceHolder
holder
)
{
mThreadRun
=
false
;
if
(
mCamera
!=
null
)
{
synchronized
(
Sample2View
.
this
)
{
mCamera
.
stopPreview
();
mCamera
.
setPreviewCallback
(
null
);
mCamera
.
release
();
mCamera
=
null
;
}
}
}
FindFeatures
(
getFrameWidth
(),
getFrameHeight
(),
data
,
rgba
);
public
void
run
()
{
mThreadRun
=
true
;
Log
.
i
(
TAG
,
"Starting thread"
);
while
(
mThreadRun
)
{
byte
[]
data
=
null
;
synchronized
(
this
)
{
try
{
this
.
wait
();
data
=
mFrame
;
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
int
frameSize
=
mFrameWidth
*
mFrameHeight
;
int
[]
rgba
=
new
int
[
frameSize
];
FindFeatures
(
mFrameWidth
,
mFrameHeight
,
data
,
rgba
);
Bitmap
bmp
=
Bitmap
.
createBitmap
(
mFrameWidth
,
mFrameHeight
,
Bitmap
.
Config
.
ARGB_8888
);
bmp
.
setPixels
(
rgba
,
0
/*offset*/
,
mFrameWidth
/*stride*/
,
0
,
0
,
mFrameWidth
,
mFrameHeight
);
Canvas
canvas
=
mHolder
.
lockCanvas
();
canvas
.
drawBitmap
(
bmp
,
(
canvas
.
getWidth
()-
mFrameWidth
)/
2
,
(
canvas
.
getHeight
()-
mFrameHeight
)/
2
,
null
);
mHolder
.
unlockCanvasAndPost
(
canvas
);
}
Bitmap
bmp
=
Bitmap
.
createBitmap
(
getFrameWidth
(),
getFrameHeight
(),
Bitmap
.
Config
.
ARGB_8888
);
bmp
.
setPixels
(
rgba
,
0
/* offset */
,
getFrameWidth
()
/* stride */
,
0
,
0
,
getFrameWidth
(),
getFrameHeight
());
return
bmp
;
}
public
native
void
FindFeatures
(
int
width
,
int
height
,
byte
yuv
[],
int
[]
rgba
);
...
...
samples/android/2-native/src/org/opencv/samples/s2/SampleViewBase.java
0 → 100644
浏览文件 @
fae67e0b
package
org.opencv.samples.s2
;
import
java.util.List
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.Canvas
;
import
android.hardware.Camera
;
import
android.hardware.Camera.PreviewCallback
;
import
android.util.Log
;
import
android.view.SurfaceHolder
;
import
android.view.SurfaceView
;
public
abstract
class
SampleViewBase
extends
SurfaceView
implements
SurfaceHolder
.
Callback
,
Runnable
{
private
static
final
String
TAG
=
"Sample::SurfaceView"
;
private
Camera
mCamera
;
private
SurfaceHolder
mHolder
;
private
int
mFrameWidth
;
private
int
mFrameHeight
;
private
byte
[]
mFrame
;
private
boolean
mThreadRun
;
public
SampleViewBase
(
Context
context
)
{
super
(
context
);
mHolder
=
getHolder
();
mHolder
.
addCallback
(
this
);
Log
.
i
(
TAG
,
"Instantiated new "
+
this
.
getClass
());
}
public
int
getFrameWidth
()
{
return
mFrameWidth
;
}
public
int
getFrameHeight
()
{
return
mFrameHeight
;
}
public
void
surfaceChanged
(
SurfaceHolder
_holder
,
int
format
,
int
width
,
int
height
)
{
Log
.
i
(
TAG
,
"surfaceCreated"
);
if
(
mCamera
!=
null
)
{
Camera
.
Parameters
params
=
mCamera
.
getParameters
();
List
<
Camera
.
Size
>
sizes
=
params
.
getSupportedPreviewSizes
();
mFrameWidth
=
width
;
mFrameHeight
=
height
;
// selecting optimal camera preview size
{
double
minDiff
=
Double
.
MAX_VALUE
;
for
(
Camera
.
Size
size
:
sizes
)
{
if
(
Math
.
abs
(
size
.
height
-
height
)
<
minDiff
)
{
mFrameWidth
=
size
.
width
;
mFrameHeight
=
size
.
height
;
minDiff
=
Math
.
abs
(
size
.
height
-
height
);
}
}
}
params
.
setPreviewSize
(
getFrameWidth
(),
getFrameHeight
());
mCamera
.
setParameters
(
params
);
mCamera
.
startPreview
();
}
}
public
void
surfaceCreated
(
SurfaceHolder
holder
)
{
Log
.
i
(
TAG
,
"surfaceCreated"
);
mCamera
=
Camera
.
open
();
mCamera
.
setPreviewCallback
(
new
PreviewCallback
()
{
public
void
onPreviewFrame
(
byte
[]
data
,
Camera
camera
)
{
synchronized
(
SampleViewBase
.
this
)
{
mFrame
=
data
;
SampleViewBase
.
this
.
notify
();
}
}
});
(
new
Thread
(
this
)).
start
();
}
public
void
surfaceDestroyed
(
SurfaceHolder
holder
)
{
Log
.
i
(
TAG
,
"surfaceDestroyed"
);
mThreadRun
=
false
;
if
(
mCamera
!=
null
)
{
synchronized
(
this
)
{
mCamera
.
stopPreview
();
mCamera
.
setPreviewCallback
(
null
);
mCamera
.
release
();
mCamera
=
null
;
}
}
}
protected
abstract
Bitmap
processFrame
(
byte
[]
data
);
public
void
run
()
{
mThreadRun
=
true
;
Log
.
i
(
TAG
,
"Starting processing thread"
);
while
(
mThreadRun
)
{
Bitmap
bmp
=
null
;
synchronized
(
this
)
{
try
{
this
.
wait
();
bmp
=
processFrame
(
mFrame
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
if
(
bmp
!=
null
)
{
Canvas
canvas
=
mHolder
.
lockCanvas
();
if
(
canvas
!=
null
)
{
canvas
.
drawBitmap
(
bmp
,
(
canvas
.
getWidth
()
-
getFrameWidth
())
/
2
,
(
canvas
.
getHeight
()
-
getFrameHeight
())
/
2
,
null
);
mHolder
.
unlockCanvasAndPost
(
canvas
);
}
bmp
.
recycle
();
}
}
}
}
\ No newline at end of file
samples/android/4-mixed/src/org/opencv/samples/s4/Sample4Mixed.java
浏览文件 @
fae67e0b
...
...
@@ -8,40 +8,45 @@ import android.view.MenuItem;
import
android.view.Window
;
public
class
Sample4Mixed
extends
Activity
{
private
static
final
String
TAG
=
"Sample4Mixed
::Activity"
;
private
static
final
String
TAG
=
"Sample
::Activity"
;
public
static
final
int
VIEW_MODE_RGBA
=
0
;
public
static
final
int
VIEW_MODE_GRAY
=
1
;
public
static
final
int
VIEW_MODE_CANNY
=
2
;
public
static
final
int
VIEW_MODE_SOBEL
=
3
;
public
static
final
int
VIEW_MODE_BLUR
=
4
;
public
static
final
int
VIEW_MODE_FEATURES
=
5
;
public
static
final
int
VIEW_MODE_RGBA
=
0
;
public
static
final
int
VIEW_MODE_GRAY
=
1
;
public
static
final
int
VIEW_MODE_CANNY
=
2
;
public
static
final
int
VIEW_MODE_SOBEL
=
3
;
public
static
final
int
VIEW_MODE_BLUR
=
4
;
public
static
final
int
VIEW_MODE_FEATURES
=
5
;
private
MenuItem
mItemPreviewRGBA
;
private
MenuItem
mItemPreviewGray
;
private
MenuItem
mItemPreviewCanny
;
private
MenuItem
mItemPreviewSobel
;
private
MenuItem
mItemPreviewBlur
;
private
MenuItem
mItemPreviewFeatures
;
private
MenuItem
mItemPreviewRGBA
;
private
MenuItem
mItemPreviewGray
;
private
MenuItem
mItemPreviewCanny
;
private
MenuItem
mItemPreviewSobel
;
private
MenuItem
mItemPreviewBlur
;
private
MenuItem
mItemPreviewFeatures
;
public
int
viewMode
;
public
static
int
viewMode
=
VIEW_MODE_RGBA
;
public
Sample4Mixed
()
{
Log
.
i
(
TAG
,
"Instantiated new "
+
this
.
getClass
());
}
/** Called when the activity is first created. */
@Override
public
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
Log
.
i
(
TAG
,
"onCreate"
);
requestWindowFeature
(
Window
.
FEATURE_NO_TITLE
);
setContentView
(
new
Sample4View
(
this
));
viewMode
=
VIEW_MODE_RGBA
;
}
public
boolean
onCreateOptionsMenu
(
Menu
menu
)
{
mItemPreviewRGBA
=
menu
.
add
(
"Preview RGBA"
);
mItemPreviewGray
=
menu
.
add
(
"Preview GRAY"
);
Log
.
i
(
TAG
,
"onCreateOptionsMenu"
);
mItemPreviewRGBA
=
menu
.
add
(
"Preview RGBA"
);
mItemPreviewGray
=
menu
.
add
(
"Preview GRAY"
);
mItemPreviewCanny
=
menu
.
add
(
"Canny"
);
mItemPreviewSobel
=
menu
.
add
(
"Sobel"
);
mItemPreviewBlur
=
menu
.
add
(
"Blur"
);
mItemPreviewFeatures
=
menu
.
add
(
"Find features"
);
mItemPreviewBlur
=
menu
.
add
(
"Blur"
);
mItemPreviewFeatures
=
menu
.
add
(
"Find features"
);
return
true
;
}
...
...
samples/android/4-mixed/src/org/opencv/samples/s4/Sample4View.java
浏览文件 @
fae67e0b
package
org.opencv.samples.s4
;
import
org.opencv.*
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.Canvas
;
import
android.hardware.Camera
;
import
android.hardware.Camera.PreviewCallback
;
import
android.util.Log
;
import
android.view.SurfaceHolder
;
import
android.view.SurfaceView
;
import
org.opencv.CvType
;
import
org.opencv.Mat
;
import
org.opencv.Size
;
import
org.opencv.core
;
import
org.opencv.imgproc
;
import
org.opencv.android
;
import
java.util.List
;
class
Sample4View
extends
SurfaceView
implements
SurfaceHolder
.
Callback
,
Runnable
{
private
static
final
String
TAG
=
"Sample4Mixed::View"
;
private
Camera
mCamera
;
private
SurfaceHolder
mHolder
;
private
int
mFrameWidth
;
private
int
mFrameHeight
;
private
byte
[]
mFrame
;
private
boolean
mThreadRun
;
class
Sample4View
extends
SampleViewBase
{
private
Mat
mYuv
;
private
Mat
mRgba
;
private
Mat
mGraySubmat
;
...
...
@@ -35,145 +14,85 @@ class Sample4View extends SurfaceView implements SurfaceHolder.Callback, Runnabl
public
Sample4View
(
Context
context
)
{
super
(
context
);
mHolder
=
getHolder
();
mHolder
.
addCallback
(
this
);
}
@Override
public
void
surfaceChanged
(
SurfaceHolder
_holder
,
int
format
,
int
width
,
int
height
)
{
if
(
mCamera
!=
null
)
{
Camera
.
Parameters
params
=
mCamera
.
getParameters
();
List
<
Camera
.
Size
>
sizes
=
params
.
getSupportedPreviewSizes
();
mFrameWidth
=
width
;
mFrameHeight
=
height
;
//selecting optimal camera preview size
{
double
minDiff
=
Double
.
MAX_VALUE
;
for
(
Camera
.
Size
size
:
sizes
)
{
if
(
Math
.
abs
(
size
.
height
-
height
)
<
minDiff
)
{
mFrameWidth
=
size
.
width
;
mFrameHeight
=
size
.
height
;
minDiff
=
Math
.
abs
(
size
.
height
-
height
);
}
}
}
params
.
setPreviewSize
(
mFrameWidth
,
mFrameHeight
);
mCamera
.
setParameters
(
params
);
mCamera
.
startPreview
();
// initialize all required Mats before usage to minimize number of auxiliary jni calls
if
(
mYuv
!=
null
)
mYuv
.
dispose
();
mYuv
=
new
Mat
(
mFrameHeight
+
mFrameHeight
/
2
,
mFrameWidth
,
CvType
.
CV_8UC1
);
if
(
mRgba
!=
null
)
mRgba
.
dispose
();
mRgba
=
new
Mat
(
mFrameHeight
,
mFrameWidth
,
CvType
.
CV_8UC4
);
if
(
mGraySubmat
!=
null
)
mGraySubmat
.
dispose
();
mGraySubmat
=
mYuv
.
submat
(
0
,
mFrameHeight
,
0
,
mFrameWidth
);
if
(
mIntermediateMat
!=
null
)
mIntermediateMat
.
dispose
();
mIntermediateMat
=
new
Mat
(
mFrameHeight
,
mFrameWidth
,
CvType
.
CV_8UC1
);
super
.
surfaceChanged
(
_holder
,
format
,
width
,
height
);
synchronized
(
this
)
{
// initialize Mats before usage
mYuv
=
new
Mat
(
getFrameHeight
()
+
getFrameHeight
()
/
2
,
getFrameWidth
(),
CvType
.
CV_8UC1
);
mGraySubmat
=
mYuv
.
submat
(
0
,
getFrameHeight
(),
0
,
getFrameWidth
());
mRgba
=
new
Mat
();
mIntermediateMat
=
new
Mat
();
}
}
public
void
surfaceCreated
(
SurfaceHolder
holder
)
{
mCamera
=
Camera
.
open
();
mCamera
.
setPreviewCallback
(
new
PreviewCallback
()
{
public
void
onPreviewFrame
(
byte
[]
data
,
Camera
camera
)
{
synchronized
(
Sample4View
.
this
)
{
mFrame
=
data
;
Sample4View
.
this
.
notify
();
}
}
}
);
(
new
Thread
(
this
)).
start
();
}
@Override
protected
Bitmap
processFrame
(
byte
[]
data
)
{
mYuv
.
put
(
0
,
0
,
data
);
public
void
surfaceDestroyed
(
SurfaceHolder
holder
)
{
mThreadRun
=
false
;
if
(
mCamera
!=
null
)
{
synchronized
(
Sample4View
.
this
)
{
mCamera
.
stopPreview
();
mCamera
.
setPreviewCallback
(
null
);
mCamera
.
release
();
mCamera
=
null
;
}
switch
(
Sample4Mixed
.
viewMode
)
{
case
Sample4Mixed
.
VIEW_MODE_GRAY
:
imgproc
.
cvtColor
(
mGraySubmat
,
mRgba
,
imgproc
.
CV_GRAY2RGBA
,
4
);
break
;
case
Sample4Mixed
.
VIEW_MODE_RGBA
:
imgproc
.
cvtColor
(
mYuv
,
mRgba
,
imgproc
.
CV_YUV420i2RGB
,
4
);
break
;
case
Sample4Mixed
.
VIEW_MODE_CANNY
:
imgproc
.
Canny
(
mGraySubmat
,
mIntermediateMat
,
80
,
100
);
imgproc
.
cvtColor
(
mIntermediateMat
,
mRgba
,
imgproc
.
CV_GRAY2BGRA
,
4
);
break
;
case
Sample4Mixed
.
VIEW_MODE_SOBEL
:
imgproc
.
Sobel
(
mGraySubmat
,
mIntermediateMat
,
CvType
.
CV_8U
,
1
,
1
);
core
.
convertScaleAbs
(
mIntermediateMat
,
mIntermediateMat
,
8
);
imgproc
.
cvtColor
(
mIntermediateMat
,
mRgba
,
imgproc
.
CV_GRAY2BGRA
,
4
);
break
;
case
Sample4Mixed
.
VIEW_MODE_BLUR
:
imgproc
.
cvtColor
(
mYuv
,
mRgba
,
imgproc
.
CV_YUV420i2RGB
,
4
);
imgproc
.
blur
(
mRgba
,
mRgba
,
new
Size
(
15
,
15
));
break
;
case
Sample4Mixed
.
VIEW_MODE_FEATURES
:
imgproc
.
cvtColor
(
mYuv
,
mRgba
,
imgproc
.
CV_YUV420i2RGB
,
4
);
FindFeatures
(
mGraySubmat
.
getNativeObjAddr
(),
mRgba
.
getNativeObjAddr
());
break
;
}
// Explicitly dispose Mats
if
(
mYuv
!=
null
)
{
mYuv
.
dispose
();
Bitmap
bmp
=
Bitmap
.
createBitmap
(
getFrameWidth
(),
getFrameHeight
(),
Bitmap
.
Config
.
ARGB_8888
);
if
(
android
.
MatToBitmap
(
mRgba
,
bmp
))
return
bmp
;
bmp
.
recycle
();
return
null
;
}
@Override
public
void
run
()
{
super
.
run
();
synchronized
(
this
)
{
// Explicitly deallocate Mats
if
(
mYuv
!=
null
)
mYuv
.
dispose
();
if
(
mRgba
!=
null
)
mRgba
.
dispose
();
if
(
mGraySubmat
!=
null
)
mGraySubmat
.
dispose
();
if
(
mIntermediateMat
!=
null
)
mIntermediateMat
.
dispose
();
mYuv
=
null
;
}
if
(
mRgba
!=
null
)
{
mRgba
.
dispose
();
mRgba
=
null
;
}
if
(
mGraySubmat
!=
null
)
{
mGraySubmat
.
dispose
();
mGraySubmat
=
null
;
}
if
(
mIntermediateMat
!=
null
)
{
mIntermediateMat
.
dispose
();
mIntermediateMat
=
null
;
}
}
public
void
run
()
{
mThreadRun
=
true
;
Log
.
i
(
TAG
,
"Starting thread"
);
while
(
mThreadRun
)
{
synchronized
(
this
)
{
try
{
this
.
wait
();
mYuv
.
put
(
0
,
0
,
mFrame
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
Sample4Mixed
a
=
(
Sample4Mixed
)
getContext
();
switch
(
a
.
viewMode
)
{
case
Sample4Mixed
.
VIEW_MODE_GRAY
:
imgproc
.
cvtColor
(
mGraySubmat
,
mRgba
,
imgproc
.
CV_GRAY2RGBA
,
4
);
break
;
case
Sample4Mixed
.
VIEW_MODE_RGBA
:
imgproc
.
cvtColor
(
mYuv
,
mRgba
,
imgproc
.
CV_YUV420i2RGB
,
4
);
break
;
case
Sample4Mixed
.
VIEW_MODE_CANNY
:
imgproc
.
Canny
(
mGraySubmat
,
mIntermediateMat
,
80
,
100
);
imgproc
.
cvtColor
(
mIntermediateMat
,
mRgba
,
imgproc
.
CV_GRAY2BGRA
,
4
);
break
;
case
Sample4Mixed
.
VIEW_MODE_SOBEL
:
imgproc
.
Sobel
(
mGraySubmat
,
mIntermediateMat
,
CvType
.
CV_8U
,
1
,
1
);
core
.
convertScaleAbs
(
mIntermediateMat
,
mIntermediateMat
,
8
);
imgproc
.
cvtColor
(
mIntermediateMat
,
mRgba
,
imgproc
.
CV_GRAY2BGRA
,
4
);
break
;
case
Sample4Mixed
.
VIEW_MODE_BLUR
:
imgproc
.
cvtColor
(
mYuv
,
mRgba
,
imgproc
.
CV_YUV420i2RGB
,
4
);
imgproc
.
blur
(
mRgba
,
mRgba
,
new
Size
(
15
,
15
));
break
;
case
Sample4Mixed
.
VIEW_MODE_FEATURES
:
imgproc
.
cvtColor
(
mYuv
,
mRgba
,
imgproc
.
CV_YUV420i2RGB
,
4
);
FindFeatures
(
mGraySubmat
.
getNativeObjAddr
(),
mRgba
.
getNativeObjAddr
());
break
;
}
Bitmap
bmp
=
Bitmap
.
createBitmap
(
mFrameWidth
,
mFrameHeight
,
Bitmap
.
Config
.
ARGB_8888
);
android
.
MatToBitmap
(
mRgba
,
bmp
);
Canvas
canvas
=
mHolder
.
lockCanvas
();
canvas
.
drawBitmap
(
bmp
,
(
canvas
.
getWidth
()-
mFrameWidth
)/
2
,
(
canvas
.
getHeight
()-
mFrameHeight
)/
2
,
null
);
mHolder
.
unlockCanvasAndPost
(
canvas
);
}
}
public
native
void
FindFeatures
(
long
matAddrGr
,
long
matAddrRgba
);
static
{
System
.
loadLibrary
(
"mixed_sample"
);
}
...
...
samples/android/4-mixed/src/org/opencv/samples/s4/SampleViewBase.java
0 → 100644
浏览文件 @
fae67e0b
package
org.opencv.samples.s4
;
import
java.util.List
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.Canvas
;
import
android.hardware.Camera
;
import
android.hardware.Camera.PreviewCallback
;
import
android.util.Log
;
import
android.view.SurfaceHolder
;
import
android.view.SurfaceView
;
public
abstract
class
SampleViewBase
extends
SurfaceView
implements
SurfaceHolder
.
Callback
,
Runnable
{
private
static
final
String
TAG
=
"Sample::SurfaceView"
;
private
Camera
mCamera
;
private
SurfaceHolder
mHolder
;
private
int
mFrameWidth
;
private
int
mFrameHeight
;
private
byte
[]
mFrame
;
private
boolean
mThreadRun
;
public
SampleViewBase
(
Context
context
)
{
super
(
context
);
mHolder
=
getHolder
();
mHolder
.
addCallback
(
this
);
Log
.
i
(
TAG
,
"Instantiated new "
+
this
.
getClass
());
}
public
int
getFrameWidth
()
{
return
mFrameWidth
;
}
public
int
getFrameHeight
()
{
return
mFrameHeight
;
}
public
void
surfaceChanged
(
SurfaceHolder
_holder
,
int
format
,
int
width
,
int
height
)
{
Log
.
i
(
TAG
,
"surfaceCreated"
);
if
(
mCamera
!=
null
)
{
Camera
.
Parameters
params
=
mCamera
.
getParameters
();
List
<
Camera
.
Size
>
sizes
=
params
.
getSupportedPreviewSizes
();
mFrameWidth
=
width
;
mFrameHeight
=
height
;
// selecting optimal camera preview size
{
double
minDiff
=
Double
.
MAX_VALUE
;
for
(
Camera
.
Size
size
:
sizes
)
{
if
(
Math
.
abs
(
size
.
height
-
height
)
<
minDiff
)
{
mFrameWidth
=
size
.
width
;
mFrameHeight
=
size
.
height
;
minDiff
=
Math
.
abs
(
size
.
height
-
height
);
}
}
}
params
.
setPreviewSize
(
getFrameWidth
(),
getFrameHeight
());
mCamera
.
setParameters
(
params
);
mCamera
.
startPreview
();
}
}
public
void
surfaceCreated
(
SurfaceHolder
holder
)
{
Log
.
i
(
TAG
,
"surfaceCreated"
);
mCamera
=
Camera
.
open
();
mCamera
.
setPreviewCallback
(
new
PreviewCallback
()
{
public
void
onPreviewFrame
(
byte
[]
data
,
Camera
camera
)
{
synchronized
(
SampleViewBase
.
this
)
{
mFrame
=
data
;
SampleViewBase
.
this
.
notify
();
}
}
});
(
new
Thread
(
this
)).
start
();
}
public
void
surfaceDestroyed
(
SurfaceHolder
holder
)
{
Log
.
i
(
TAG
,
"surfaceDestroyed"
);
mThreadRun
=
false
;
if
(
mCamera
!=
null
)
{
synchronized
(
this
)
{
mCamera
.
stopPreview
();
mCamera
.
setPreviewCallback
(
null
);
mCamera
.
release
();
mCamera
=
null
;
}
}
}
protected
abstract
Bitmap
processFrame
(
byte
[]
data
);
public
void
run
()
{
mThreadRun
=
true
;
Log
.
i
(
TAG
,
"Starting processing thread"
);
while
(
mThreadRun
)
{
Bitmap
bmp
=
null
;
synchronized
(
this
)
{
try
{
this
.
wait
();
bmp
=
processFrame
(
mFrame
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
if
(
bmp
!=
null
)
{
Canvas
canvas
=
mHolder
.
lockCanvas
();
if
(
canvas
!=
null
)
{
canvas
.
drawBitmap
(
bmp
,
(
canvas
.
getWidth
()
-
getFrameWidth
())
/
2
,
(
canvas
.
getHeight
()
-
getFrameHeight
())
/
2
,
null
);
mHolder
.
unlockCanvasAndPost
(
canvas
);
}
bmp
.
recycle
();
}
}
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录