Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
61160492
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
61160492
编写于
5月 25, 2012
作者:
A
Alexander Mordvintsev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
video_threaded.py sample now uses multiprocessing module's ThreadPool
上级
a71e690b
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
18 addition
and
52 deletion
+18
-52
samples/python2/video_threaded.py
samples/python2/video_threaded.py
+18
-52
未找到文件。
samples/python2/video_threaded.py
浏览文件 @
61160492
import
numpy
as
np
import
cv2
from
Queue
import
Queue
from
threading
import
Thread
from
multiprocessing.pool
import
ThreadPool
from
collections
import
deque
class
Worker
(
Thread
):
def
__init__
(
self
,
tasks
):
Thread
.
__init__
(
self
)
self
.
tasks
=
tasks
self
.
daemon
=
True
self
.
start
()
def
run
(
self
):
while
True
:
func
,
args
,
kargs
=
self
.
tasks
.
get
()
try
:
func
(
*
args
,
**
kargs
)
except
Exception
,
e
:
print
e
self
.
tasks
.
task_done
()
class
ThreadPool
:
def
__init__
(
self
,
num_threads
):
self
.
tasks
=
Queue
(
num_threads
)
for
_
in
range
(
num_threads
):
Worker
(
self
.
tasks
)
def
add_task
(
self
,
func
,
*
args
,
**
kargs
):
self
.
tasks
.
put
((
func
,
args
,
kargs
))
def
wait_completion
(
self
):
self
.
tasks
.
join
()
if
__name__
==
'__main__'
:
results
=
deque
()
def
process_frame
(
i
,
frame
):
global
results
res
=
cv2
.
medianBlur
(
frame
,
15
)
re
sults
.
append
((
i
,
res
))
pool
=
ThreadPool
(
4
)
def
process_frame
(
frame
):
# some intensive computation...
frame
=
cv2
.
medianBlur
(
frame
,
19
)
frame
=
cv2
.
medianBlur
(
frame
,
19
)
frame
=
cv2
.
medianBlur
(
frame
,
19
)
re
turn
frame
threadn
=
8
cap
=
cv2
.
VideoCapture
(
0
)
frame_count
=
0
last_frame
=
None
last_count
=
-
1
pool
=
ThreadPool
(
processes
=
threadn
)
pending
=
deque
()
while
True
:
while
len
(
pending
)
>
0
and
pending
[
0
].
ready
():
res
=
pending
.
popleft
().
get
()
cv2
.
imshow
(
'result'
,
res
)
if
len
(
pending
)
<
threadn
+
1
:
ret
,
frame
=
cap
.
read
()
pool
.
add_task
(
process_frame
,
frame_count
,
frame
.
copy
())
frame_count
+=
1
while
len
(
results
)
>
0
:
i
,
frame
=
results
.
popleft
()
if
i
>
last_count
:
last_count
,
last_frame
=
i
,
frame
if
last_frame
is
not
None
:
cv2
.
imshow
(
'res'
,
last_frame
)
task
=
pool
.
apply_async
(
process_frame
,
(
frame
.
copy
(),))
pending
.
append
(
task
)
if
cv2
.
waitKey
(
1
)
==
27
:
break
pool
.
wait_completion
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录