python-opencv 图像分块处理
来源:互联网 发布:高考网络应用 编辑:程序博客网 时间:2024/06/08 20:10
可能是由于刚接触python,其函数参数传递跟C++有非常大的不同,花了很多的时间
还是按照惯例,先贴源码,但是在此之前先说明,多线程共享对象目前发现只能通过dict进行,发现list等其他类型并不起到引用传递的作用。
# -*- coding: cp936 -*-
import cv2
import sys
import multiprocessing
import time
import os
import numpy as np
class imgA:
def __init__(self):
print 'init:',os.getpid()
self.a=[]
self.b=[]
self.c=[]
self.all=[]
self.radius = multiprocessing.Manager().dict()
self.radius['a'] = self.a
self.radius['b']=self.b
self.radius['c']=self.c
self.radius['all']=self.all
def add(self):
for i in range(self.a.shape[0]):
for j in range(self.a.shape[1]):
if(self.a[i][j])>0:
self.a[i][j]=0
else:
self.a[i][j]=255
self.radius['a']=self.a
def add2(self):
for i in range(self.b.shape[0]):
for j in range(self.b.shape[1]):
if(self.b[i][j])>0:
self.b[i][j]=0
else:
self.b[i][j]=255
self.radius['b']=self.b #需要更新
def add3(self):
for i in range(self.all.shape[0]):
for j in range(self.all.shape[1]):
if(self.all[i][j])>0:
self.all[i][j]=0
else:
self.all[i][j]=255
self.radius['all']=self.all #需要更新
def read(self):
self.all=cv2.imread('E:\\41.bmp',0)
imgsize=self.all.shape[0]
self.a = (self.all)[0:imgsize/2]
self.b = (self.all)[imgsize/2:imgsize]
self.radius['a'] = self.a
self.radius['b']=self.b
self.radius['all']=self.all
if __name__ == '__main__':
t_ctime=time.clock()
aa = imgA()
aa.read()
print 'start'
process1 = multiprocessing.Process(target=aa.add, args=())
process2 = multiprocessing.Process(target=aa.add2, args=())
process1.daemon = True
process2.daemon = True
process1.start()
process2.start()
process1.join()
process2.join()
print 'done'
gg=np.concatenate((aa.radius['a'],aa.radius['b']))
t_ctime=(time.clock()-t_ctime)*1000
print t_ctime,'ms'
cv2.imshow('gg',gg)
cv2.imshow('a',aa.radius['a'])
cv2.imshow('b',aa.radius['b'])
cv2.imshow('all',aa.radius['all'])
# print aa.radius,os.getpid()
cv2.waitKey(0)
可以看到,每次操作我们并不直接操作共享对象,而是操作类中的,相当于其备份,等操作完成后再进行覆盖,目前测试只发现这种方式可行。不使用类的形式,采用函数是绝对行不通的。
以上的代码总体思想是,将读取的图像进行分块,然后建立相应的进程(核心数决定),最后再组合在一起。经测试,多开一个进程效率提高大约在30%以上。如果有错误请联系QQ:498235584!万分感谢
- python-opencv 图像分块处理
- opencv 图像分块处理
- [python + opencv] 图像的旋转和分块
- Python 调用 opencv 处理图像
- Python图像处理(7):利用轮廓分块处理
- gdal图像分块处理
- Python-OpenCV 处理图像(七):图像灰度化处理
- Python-OpenCV 处理图像(八):图像二值化处理
- Python-OpenCV 处理图像(七):图像灰度化处理
- python加opencv进行图像处理
- Python图像处理(1):替换OpenCV
- Python-OpenCV 图像与视频处理
- Python-OpenCV 图像与视频处理
- Python-OpenCV 图像与视频处理
- Python OpenCV Tutorial Introduction图像处理教程
- Python-OpenCV 图像与视频处理
- OpenCV-Python 图像与视频处理
- 基于opencv的Python图像处理
- 简单的TFIDF算法实现Java代码
- AndroidStudio日常使用小记
- Android7.0 Messaging源码分析(5) - MMS类库篇
- Android 动态改变SeekBar进度条颜色与滑块颜色
- MES项目参观交流会
- python-opencv 图像分块处理
- 如何利用ip数据来辅助风控和安全系统
- mybatis实现物理分页准备之mybatis配置文件解析及实例
- 禁止EditText输入特殊字符
- Android的网络连接判断
- 使用SharedPreferences保存复杂类型的数据
- java深浅复制以及引用传递
- 贝贝网创始人张良伦: 市场环境差,反而能诞生好公司
- oracle 常用的数据字典----转自“七仔”