利用cv2实现图片批量化区域修改

今年上学期有同学接了个小兼职,用修图软件批量修改图片某一部分,虽然步骤很简单,但是工作量很大 然后当时串宿舍的时候看到了,就思索能不能用程序实现这个重复步骤很多的工作 然后回去一顿捣鼓,最后实现了 我还小赚了一笔外快() 下面把代码贴出来 有点乱 也没有封装 仅供参考

这个是修改图片区域像素的替换过程:

import cv2
import numpy as np
import multiprocess
def cv_imread(file_path):
    cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
    return cv_img
num = 1
def a(i):
    file2 = '33'
    file = 'a' + str(i) + '.jpg'
    filename_1 = './'+file2+'/'+ file
    img1 = cv_imread(filename_1)
    img2 = cv_imread('./p/22.png')
    rows,cols,channels = img2.shape
    chang = 495    #1412 654  495
    kuan = 618     #1412 654  568 618
    roi = img1[chang:chang+rows,kuan:kuan+cols]

    img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
    ret,mask  = cv2.threshold(img2gray,255,255,cv2.THRESH_BINARY)
    mask_inv = cv2.bitwise_not(mask)

    img1_bg = cv2.bitwise_and(roi,roi,mask=mask)
    img2_bg = cv2.bitwise_and(img2,img2)

    dst = cv2.add(img1_bg,img2_bg)
    img1[chang:chang+rows,kuan:kuan+cols] = dst
    filename = './'+file2+'_ok/'+file
   # cv2.imwrite(str(num)+'.jpg',img1)
    cv2.imencode('.jpg', img1)[1].tofile(filename)
    print('OK')
  #  cv2.imshow('res',img1)
  #  cv2.waitKey(0)
  #  cv2.destroyAllWindows()
for i in range(1,1501):
    a(i)

你可能感兴趣的:(练习)