layui图片src 指定后没显示_2种方法用python调用cv2模块给图片打马赛克
生活随笔
收集整理的這篇文章主要介紹了
layui图片src 指定后没显示_2种方法用python调用cv2模块给图片打马赛克
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 說明:
=====
1.1 因各種需要,給圖片打馬賽克,當然本人著重介紹python用cv2的方法,主要講解python和cv2的相關編程知識。
1.2 cv2模塊:是OpenCV的python調用模塊,本人有初步介紹,此處省略,可以看下面文章的鏈接:
https://www.toutiao.com/i6833713845005976067/1.3 使用圖片來源,下圖,來源今日頭條圖庫。
2 方法一,指定區域打馬賽克:
======================
2.1 如何選定需要打馬賽克的區域,即獲取左上頂點的坐標x和y,還有馬賽克寬和高:
2.2 先采用基本法zhao.py顯示圖片,代碼:
#導入模塊import cv2 #讀取圖像,指定路徑和文件夾img = cv2.imread("/home/xgj/Desktop/OpenCV/kiss.jpeg") #窗口標題名和掛在讀取圖片img顯示cv2.imshow("Show Your Image", img) #不支持中文標題名#默認為0,空值就是0,如果是非0,則就是動畫,一張圖沒效果#cv2.waitKey (0) cv2.waitKey () cv2.destroyAllWindows()2.3 用上面顯示圖片法,找坐標,如下圖:
2.4 記下需要馬賽克區域的x和y坐標:
即左上頂點x和y是500,300
右下角x和y是600,450
所以得到:
#左上頂點坐標500,300(x,y),右下坐標600,450(x,y)#所以需要馬賽克寬100,高150do_mosaic(im, 500, 300, 100, 150) #指定馬賽克區域2.5 mosaic1.py完整代碼:
#導出模塊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: 馬賽克每一塊的寬 """ #獲取這張圖片的h和w,并賦值給fh和fw 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)#讀取本地圖片,1代表原色就是彩色im = cv2.imread('/home/xgj/Desktop/OpenCV/kiss.jpeg', 1)#左上頂點坐標500,300(x,y),右下坐標600,450(x,y)#所以需要馬賽克寬100,高150do_mosaic(im, 500, 300, 100, 150) #指定馬賽克區域while 1: k = cv2.waitKey(10) if k == 27:#這是一個退出設置,27代表按esc按鍵 break cv2.imshow('mosaic', im)#保存生成的mosaic的圖片cv2.imwrite('/home/xgj/Desktop/OpenCV/kissmosaic.jpeg', im)2.6 效果圖
3 方法二:鼠標選定打馬賽克法:
========================
3.1 mosaic2.py代碼:
#coding:utf-8import cv2import numpy as np#定義初始化point_start = {'x':0,'y':0}point_end = {'x':0,'y':0}rows = 0cols = 0point_lft=0point_rgt=0selected = False#定義馬賽克效果函數def mosaic(selected_image,nsize=9): rows,cols,_ = selected_image.shape dist = selected_image.copy() # 劃分小方塊,每個小方塊填充隨機顏色 for y in range(0,rows,nsize): for x in range(0,cols,nsize): dist[y:y+nsize,x:x+nsize] = (np.random.randint(0,255),np.random.randint(0,255),np.random.randint(0,255)) return dist#定義鼠標操作,選定操作,注意點擊按住鼠標左鍵,往下拖def mouse_handler(event,x,y,flag,params): global point_lft,point_rgt,selected if event == cv2.EVENT_LBUTTONDOWN: print('button down') point_start['x'] = x point_start['y'] = y if event == cv2.EVENT_LBUTTONUP: print('button up') point_end['x'] = x point_end['y'] = y selected = True#導入原圖 src = cv2.imread('/home/xgj/Desktop/OpenCV/kiss.jpeg')#獲取原圖大小和像素rows,cols,_ = src.shapesrc_cpy = src.copy()#顯示原圖cv2.namedWindow("src")#在原圖上調用鼠標操作cv2.setMouseCallback("src",mouse_handler)#如果鼠標沒有選定while not selected: cv2.imshow('src',src) key = cv2.waitKey(10)# 處理選擇的矩形rect = {}if point_start['x'] < point_end['x']: rect['x'] = point_start['x'] rect['y'] = point_start['y'] rect['width'] = np.abs(point_end['x'] - point_start['x']) rect['height'] = np.abs(point_end['y'] - point_start['y']) cv2.rectangle(src,(point_start['x'],point_start['y']),(point_end['x'],point_end['y']),(255,0,0),3)else: rect['x'] = point_end['x'] rect['y'] = point_end['y'] rect['width'] = np.abs(point_end['x'] - point_start['x']) rect['height'] = np.abs(point_end['y'] - point_start['y']) cv2.rectangle(src,(point_end['x'],point_end['y']),(point_start['x'],point_start['y']),(255,0,0),3)cv2.imshow('src',src)print('selected rect = ',rect)# 選擇圖像select_image = src_cpy[rect['y']:rect['y']+rect['height'], rect['x']:rect['x']+rect['height']]result = mosaic(select_image)# 將處理完成的區域合并回原圖像src_cpy[rect['y']:rect['y']+rect['height'], rect['x']:rect['x']+rect['height']] = cv2.addWeighted(result,0.65,select_image,0.35,2.0)#顯示馬賽克效果的圖片cv2.imshow('result',src_cpy)#保存已經生成馬賽克效果的圖片和位置cv2.imwrite('/home/xgj/Desktop/OpenCV/kissmosaic2.jpeg', src_cpy)cv2.waitKey()cv2.destroyAllWindows()3.2 效果圖
自己整理并分享出來,喜歡的就點贊、轉發和收藏。
總結
以上是生活随笔為你收集整理的layui图片src 指定后没显示_2种方法用python调用cv2模块给图片打马赛克的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sqlserver2000内存突破4g_
- 下一篇: macos 全局快捷键 打开 iterm