当前位置:   article > 正文

[opencv 从零开始 2 ] 自动给人脸打马赛克,numpy生成随机图,图像通道的拆分与合并,获取图像的属性_opencv随机打码

opencv随机打码

目录

 

环境依赖:

自动给人脸打马赛克(图片、视频道理类似不要去干坏事哦)

numpy生成随机图

图像通道的拆分与合并

获取图像的属性


环境依赖:

python3.7

opencv 我下载的是最新的

numpy

opencv-contrib-python (这是opencv贡献库,里面有很对的模块算法可以使用

生物领域、深度学习、人脸识别、文本等还有很多,宗旨很强大,大家可以自己去挖掘。

提醒一下,这个库在安装opencv时就安装了,不需要在安装拉

)

 

自动给人脸打马赛克(图片、视频道理类似不要去干坏事哦)

      

好了我们开使做正事叭,说实话,opencv自带模型还是不精确的,想要完美的识别——>匹配——>打码 还是需要很多优化的。

效果图:

 

上代码!

  1. import cv2 # opencv库
  2. ##马赛克
  3. def do_mosaic(frame, x, y, w, h, neighbor=9):
  4. """
  5. 马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内左上像素点的颜色代替,这样可以模糊细节,但是可以保留大体的轮廓。
  6. :param frame: opencv frame
  7. :param int x : 马赛克左顶点
  8. :param int y: 马赛克右顶点
  9. :param int w: 马赛克宽
  10. :param int h: 马赛克高
  11. :param int neighbor: 马赛克每一块的宽
  12. """
  13. fh, fw = frame.shape[0], frame.shape[1]
  14. if (y + h > fh) or (x + w > fw):
  15. return
  16. for i in range(0, h - neighbor, neighbor): # 关键点0 减去neightbour 防止溢出
  17. for j in range(0, w - neighbor, neighbor):
  18. rect = [j + x, i + y, neighbor, neighbor]
  19. color = frame[i + y][j + x].tolist() # 关键点1 tolist
  20. left_up = (rect[0], rect[1])
  21. right_down = (rect[0] + neighbor - 1, rect[1] + neighbor - 1) # 关键点2 减去一个像素
  22. cv2.rectangle(frame, left_up, right_down, color, -1)
  23. # 读取图片
  24. image = cv2.imread('test.jpg')
  25. # 加载人脸模型库 请根据你xml实际
  26. face_model = cv2.CascadeClassifier("C:\\Users\\HUAWEI\\.conda\\envs\\learn\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml")
  27. # 图片进行灰度处理
  28. gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
  29. # 人脸检测
  30. faces = face_model.detectMultiScale(gray)
  31. # 标记人脸
  32. for (x, y, w, h) in faces:
  33. # 1.原始图片;2坐标点;3.矩形宽高 4.颜色值(RGB);5.线框
  34. do_mosaic(image, x, y, w, h,15)
  35. # 显示图片窗口
  36. cv2.imshow('faces', image)
  37. # 窗口暂停
  38. key = cv2.waitKey(0)
  39. if key == ord('s'): #英文状态下键盘按s键,会将图片保存至桌面
  40. font = cv2.FONT_HERSHEY_DUPLEX
  41. #参数依次为:涂鸦的图片、涂鸦的文字、位置、字体、字体大小、字体颜色、字体画笔粗细
  42. cv2.imwrite('girl3.png',image, [int(cv2.IMWRITE_JPEG_QUALITY),100])
  43. # 销毁窗口
  44. cv2.destroyAllWindows()

 

numpy生成随机图

  1. import numpy as np
  2. import cv2 as cv
  3. #生成灰度图
  4. img = np.random.randint(0,256,size=[256,256],dtype=np.uint8)
  5. cv.imshow("Grayscale",img)
  6. #生成三通道的彩色图
  7. img = np.random.randint(0,256,size=[256,256,3],dtype=np.uint8)
  8. cv.imshow("RGB",img)
  9. cv.waitkey()
  10. cv.destroAllWindows()

 

图像通道的拆分与合并

  1. import cv2 as cv
  2. import numpy
  3. img = cv.imread("test.jpg")
  4. cv.imshow("test",img)
  5. #拆分bgr通道的值
  6. b = img[:,:,0]
  7. g = img[:,:,1]
  8. r = img[:,:,2]
  9. cv.imshow("btest",b)
  10. cv.imshow("btest",g)
  11. cv.imshow("btest",r)
  12. cv.waitkey()
  13. cv.destorAllWindows()
  14. #通过函数来拆分
  15. img = cv.imread("test.jpg")
  16. cv.imshow("test",img)
  17. b,g,r = cv.split(img)
  18. b = img[:,:,0]
  19. g = img[:,:,1]
  20. r = img[:,:,2]
  21. cv.imshow("btest",b)
  22. cv.imshow("btest",g)
  23. cv.imshow("btest",r)
  24. cv.waitkey()
  25. cv.destorAllWindows()

 

获取图像的属性

  1. import cv2 as cv
  2. import numpy
  3. img = cv.imread("test.jpg")
  4. cv.imshow("test",img)
  5. print(img.shape)
  6. #通过shape可以知道,图像的行、列、通道数,如果时灰度或者二值 ,我们就可以通过它来区分
  7. print(img.size)
  8. #返回图像的像素数目,其值为 行*列*通道数
  9. print(img.dtype)
  10. #查看图像类型

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/760329
推荐阅读
相关标签
  

闽ICP备14008679号