一、实验目的
用Python和OpenCV编写一个程序,对给定图像中的局部区域打上马赛克效果,通过该实验让学生了解给图像打马赛克的原理,掌握具体的编程方法。
二、实验要求
1. 用OpenCV编写一个程序,对给定图像中的局部区域打上马赛克效果,要求能通过拖动鼠标的方式让使用者灵活自主地给图像打马赛克。
2. 认真撰写实验报告,要求说明实验原理,对实验过程叙述清楚,关键代码给出注释,对实验结果给出合理解释,实验分析部分则需要指出实验结果优劣的原因以及如何进一步提高实验性能的方法或手段。
3. 利用python版的OpenCV编写代码。
三、实验代码与结果
3.1 实验代码
# ———————— 实验一 ——————————————
from cv2 import cv2 #导入openCV库
import numpy as np #导入numpy库
img=cv2.imread(r".test1.jpg") #读取图片,采用相对路径
enable=False
def call_back_draw(event,x,y,flags,param):
global enable #定义全局变量,改正enable
if event==cv2.EVENT_LBUTTONDOWN: #鼠标左键按下
enable=True
elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON: #鼠标移动,鼠标左键
if enable:
drawMask(y,x)
elif event==cv2.EVENT_LBUTTONUP: #鼠标左键抬起
enable=False
# 图像局部采样函数
def drawMask(x,y,size=10):
m=np.uint8(x/size)*size
n=np.uint8(y/size)*size
# size大小范围内的图像像素值设置为同一个像素值
for i in range(size):
for j in range(size):
img[m+i][n+j]=img[m][n]
cv2.namedWindow('image') #给窗口命名,这样可以自由调节窗口的大小
cv2.setMouseCallback('image',call_back_draw) #鼠标回调函数
while True:
cv2.imshow('image',img) #图像不停的显示。
if cv2.waitKey(1)==ord('q'): #按q键退出程序
break
cv2.destroyAllWindows()
3.2 实验结果
运行代码后会打开窗口:
用鼠标在串口上的图像进行点击或者拖动会进行加码:
按Q键后,窗口关闭。
结语
这是本人大学期间机器视觉实验报告。顺走的记得改改图片,报告内容也稍作修改、排版也别跟一样好吧。
代码打包:
https://download.csdn.net/download/qq_25662827/85465828https://download.csdn.net/download/qq_25662827/85465828



