1. 程式人生 > 程式設計 >python使用opencv實現馬賽克效果示例

python使用opencv實現馬賽克效果示例

本文例項講述了python使用opencv實現馬賽克效果。分享給大家供大家參考,具體如下:

最近要實現opencv視訊打馬賽克,在網上找了一下基本是C++的實現,好在原理一樣,下面給出python實現。

原理和注意點,我都寫在註釋裡了

import cv2
##馬賽克
def do_mosaic(frame,x,y,w,h,neighbor=9):
  """
  馬賽克的實現原理是把影象上某個畫素點一定範圍鄰域內的所有點用鄰域內左上畫素點的顏色代替,這樣可以模糊細節,但是可以保留大體的輪廓。
  :param frame: opencv frame
  :param int x : 馬賽克左頂點
  :param int y: 馬賽克右頂點
  :param int w: 馬賽克寬
  :param int h: 馬賽克高
  :param int neighbor: 馬賽克每一塊的寬
  """
  fh,fw = frame.shape[0],frame.shape[1]
  if (y + h > fh) or (x + w > fw):
    return
  for i in range(0,h - neighbor,neighbor): # 關鍵點0 減去neightbour 防止溢位
    for j in range(0,w - neighbor,neighbor):
      rect = [j + x,i + y,neighbor,neighbor]
      color = frame[i + y][j + x].tolist() # 關鍵點1 tolist
      left_up = (rect[0],rect[1])
      right_down = (rect[0] + neighbor - 1,rect[1] + neighbor - 1) # 關鍵點2 減去一個畫素
      cv2.rectangle(frame,left_up,right_down,color,-1)
im = cv2.imread('test.jpg',1)
do_mosaic(im,219,61,460 - 219,412 - 61)

while 1:
  k = cv2.waitKey(10)
  if k == 27:
    break
  cv2.imshow('mosaic',im)

原圖為:

效果如下:

圖片來自網上,如有侵權,聯絡刪除。

更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python圖片操作技巧總結》、《Python資料結構與演算法教程》、《Python Socket程式設計技巧總結》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》及《Python檔案與目錄操作技巧彙總》

希望本文所述對大家Python程式設計有所幫助。