本人刚接触python,想做图片的处理:对一张RGB图像进行处理,判断每个点如果R<150或者G<150或者B<150则把这个点变为【0,0,0】。但是对于一章4000*6000的照片来说要运行两分多钟,请问有没有大神可以为我指点迷津,采用什么方法能把速度缩短到一秒以内。
img = cv2.imread("./IMG_4314.jpg");
for i in range(len(img)):
for ii in range(len(img[i])):
if img[i][ii][0]<yu or img[i][ii][1]<yu or img[i][ii][2]<yu:
img[i][ii]=np.array([0,0,0])
cv2.imwrite('./white4981.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY),70])
注:不要c++的方法,就想用python
不知道行不行
from PIL import Image
img = Image.open('E:\\Administrator\\Desktop\\微信图片_20181217104229.jpg')
pix = img.load()
width = img.size[0]
height = img.size[1]
for x in range(width):
for y in range(height):
r, g, b = pix[x, y]
#print(r, g, b)
if(r<150 or g < 150 or b<150):
pix[x, y] = 0
img.show()
1 秒以内怕是强人所难了,39.7 秒可还行?
import cv2
import time
if __name__ == "__main__":
earth = cv2.imread('1561704219_706771.jpg')
start_time = time.time()
compared = earth < 150
print(compared.shape)
for index_1, result_1 in enumerate(compared):
for index_2, result_2 in enumerate(result_1):
if result_2.any():
earth[index_1, index_2] = [0, 0, 0]
cost_time = time.time() - start_time
print("cost {} s".format(cost_time))
cv2.imwrite('767515.jpg', earth)
调用Opencv库,这样应该能行:
cv2.inRange(image,np.array([150;150;150]),np.array([255;255;255]))