4.python-opencv图像马赛克

第一章 python-opencv-图片导入和显示
第二章 python-opencv图像简单处理
第三章 python-opencv图像mask掩膜处理


文章目录

  • 4.python-opencv图像马赛克
  • 完整代码
    • 方法一:通过尺寸改变实现马赛克
    • 方法二:通过像素重复实现马赛克
    • 方法三:间隔提取像素实现马赛克
  • 一、方法一说明
  • 二、方法二说明
    • 三、方法三说明
  • 总结
  • 代码运行效果
    • 方法一效果
    • 方法二效果
    • 方法三效果

完整代码

在这里使用三种方法实现图像马赛克的处理。

方法一:通过尺寸改变实现马赛克

import cv2if __name__ == '__main__':# 加载图片picture = cv2.imread('lena.png')# 获取图片尺寸print(picture.shape)# 马赛克方法一:改变尺寸# 尺寸缩小img1 = cv2.resize(picture,(61, 55))# 尺寸放大img2 = cv2.resize(img1,(610, 553))cv2.imshow('picture', img2)cv2.waitKey(0)cv2.destroyAllWindows()

方法二:通过像素重复实现马赛克

import cv2if __name__ == '__main__':# 加载图片picture = cv2.imread('lena.png')    #马赛克方法二:# 图像尺寸缩小10倍img1 = cv2.resize(picture,(61, 55))# 在第一维度将每个像素重复10次img2 = np.repeat(img1, 10, axis=0) # 在第二维度将每个像素重复10次img3 = np.repeat(img2, 10, axis=1) cv2.imshow('picture', img3)cv2.waitKey(0)cv2.destroyAllWindows()

方法三:间隔提取像素实现马赛克

import cv2if __name__ == '__main__':# 加载图片picture = cv2.imread('lena.png')    #马赛克方法三# #每隔10个像素取一个像素值img = picture[::10, ::10] # 创建显示窗口 cv2.namedWindow('picture',flags=cv2.WINDOW_NORMAL)# 更改显示窗口的尺寸cv2.resizeWindow('picture',610, 553)cv2.imshow('picture', img)cv2.waitKey(0)cv2.destroyAllWindows()

一、方法一说明

方法一的思想是现将图片尺寸缩小N倍,再将图片方法N倍,从而达到模糊图片的目的,其中所使用的函数为resize()函数,resize()函数的定义如下:

resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)

调整大小(src,dsize[,dst[,fx[,fy[,插值]]]])-> dst
.函数 resize 将图像 src 的大小缩小到或最大到指定的大小。请注意,
.不考虑初始 dst 类型或大小。相反,大小和类型来自srcdsizefxfy
如果您想调整 src 的大小以使其适合预先创建的 dst,您可以按如下方式调用该函数:
.1.明确指定 dsize=dst.size(); fx 和 fy 将据此计算。
. resize(src, dst, dst.size(), 0, 0, 插值);
.2.如果要在每个方向将图像抽取 2 倍,可以调用函数 this
. 指定 fx 和 fy 并让函数计算目标图像大小。
.调整大小(src,dst,Size(),0.5,0.5,插值);
.3.要缩小图像,通常使用#INTER_AREA 插值看起来效果最好,而放大图像,通常使用 c#INTER_CUBIC (slow) 或 #INTER_LINEAR 效果最佳(更快,但看起来还可以)。
.
. @参数 src 输入图像。
. @参数 dst 输出图像;它的大小为 dsize (当它非零时)或计算的大小
. src.size()、fx 和 fy; dst 的类型与 src 的类型相同。
. @参数 dsize 输出图像大小;如果它等于 0(Python 中的“无”),则计算为:
.\f[\texttt{dsize = Size(round(fxsrc.cols), round(fysrc.rows))}\f]
. dsize 或 fx 和 fy 必须为非零。
. @参数 fx 沿水平轴的比例因子;当它等于 0 时,它被计算为
. \f[\texttt{(double)dsize.width/src.cols}\f]
. @参数 fy 沿垂直轴的比例因子;当它等于 0 时,它被计算为
. \f[\texttt{(double)dsize.height/src.rows}\f]
. @参数interpolation,见#InterpolationFlags

在python-opencv中的使用方法:

img = cv2.resize(picture,(61, 55))  #picture为要进行尺寸改变的图像,(61, 55)为改变后的尺寸大小

二、方法二说明

方法二的思想是先将图像缩小N倍,将每个像素冲符N次将图像变为与原始图像相同的尺寸,由于像素的重复从而达到图片模糊的效果,其中主要怕使用的函数为repeat()函数,repeat()函数的定义如下:

repeat(a, repeats, axis=None)

a:array_like
输入数组。
repeats:整数或整数数组
每个元素的重复次数。 repeats 被广播
以适应给定轴的形状。
axis:int,可选
沿其重复值的轴。 默认情况下,使用
扁平化的输入数组,并返回一个扁平的输出数组。

在python-opencv中的使用方法:

img1= np.repeat(img, 10, axis=0)  #将img图像在第一维度上将每个像素重复10次

三、方法三说明

方法三的思想是间隔提取图像的像素,从而将部分像素对其,从而实现图像模糊的效果,通过设置不同的间隔大小,可以改变图像的模糊程度。

通过切片操作实现间隔像素提取

img = picture[::10, ::10]   # 每隔10个像素值提取一次

创建显示窗口显示提取的图片

 cv2.namedWindow('picture',flags=cv2.WINDOW_NORMAL)

扩大显示窗口到原始图像大小

cv2.resizeWindow('picture',610, 553)

总结

本文主要讲了讲图片模糊达到图像马赛克的效果,主要使用了三种方法,方法一为将图片尺寸缩小N倍,再将图片方法N倍,从而达到模糊图片的目的;方法二为先将图像缩小N倍,将每个像素冲符N次将图像变为与原始图像相同的尺寸,由于像素的重复从而达到图片模糊的效果;方法三为间隔提取图像的像素,从而将部分像素对其,从而实现图像模糊的效果

代码运行效果

方法一效果

方法二效果

方法三效果

4.python-opencv图像马赛克相关推荐

  1. python opencv 图像膨胀

    python opencv 图像膨胀 代码: import cv2 import numpy as np # 图像膨胀 def dilate_img(img,a,iterations):kernel ...

  2. python opencv 图像旋转

    python opencv 图像旋转 原图 顺时针旋转 代码: import cv2 path = '2.jpg' img = cv2.imread(path,1) trans_img = cv2.t ...

  3. python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例

    python opencv 二值化 计算白色像素点的实例 贴部分代码 #! /usr/bin/env python # -*- coding: utf-8 -*- import cv2 import ...

  4. 【Python+OpenCV 图像透视变换 warpPerspective函数】

    Python+OpenCV 图像透视变换 warpPerspective函数 1.函数介绍 2.代码实例 3.实现效果 1.函数介绍 warpPerspective():对图像进行透视变换.简单来说, ...

  5. 【Python+OpenCV 图像的缩放和裁剪】

    Python+OpenCV 图像的缩放和裁剪 代码部分 实现效果 代码部分 import cv2 import numpy as npimg = cv2.imread("Photos/1.b ...

  6. Python OpenCV 图像缩放 cv2.resize 方法

    今天是持续写作的第 42 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 本篇博客只学习一个方法,cv2.resize 即图像缩放. 取经之旅第 9 天 铺垫知识 resize 方 ...

  7. Python OpenCV 图像平移,取经之旅第 10 天

    今天是持续写作的第 43 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 本篇博客学习 OpenCV 中关于图像平移的方法,核心学习到的方法是 warpAffine . 取经之旅第 ...

  8. Python OpenCV 图像的几何变换,先说不平凡的 resize 函数

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 41 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...

  9. python opencv 图像网络传输

    本代码主要实现的是利用网络传输图片,用在我的树莓派项目之上.该项目在PC上运行服务端,树莓派上运行客户端,两者连接到同一局域网中,修改代码中的IP地址,就可以实现将树莓派采集到的图像数据实时传输到PC ...

  10. python opencv图像对比度增强_图像增强、锐化, Python-OpenCV 来实现 4 种方法!

    图像增强目的使得模糊图片变得更加清晰.图片模糊的原因是因为像素灰度差值变化不大,如片各区域产生视觉效果似乎都是一样的, 没有较为突出的地方,看起来不清晰的感觉 解决这个问题的最直接简单办法,放大像素灰 ...

最新文章

  1. Android系统自带样式(android:theme)(转)
  2. Elasticsearch使用BulkProcessor批量插入
  3. JavaSE 基础面试题
  4. Ureport2源码修改
  5. intellij设置scala的sdk
  6. IDEA启动tomcat报错java.util.zip.ZipException: error in opening zip file
  7. mysql数据迁移neo4j_neo4j数据库迁移---------Neo4j数据库导入导出的方法
  8. rust 死后不知道家在哪_女朋友问去哪吃饭别说不知道了,郑州这几家餐厅最适合情侣约会。...
  9. 20180601 -1
  10. sql profiler_这是SQL Profiler的结尾吗?
  11. 最近有啥ML比赛能表现自己的优秀?CVPR2018图像压缩大赛
  12. ASP.NET MVC 3和Razor中的@helper
  13. 如何备份linux,如何备份Linux系统
  14. ftp等远程登录工具的星号密码查看方法
  15. TIA PORTAL西门子PLC的CPU固件版本兼容问题
  16. 在unti-app中使用阿里的iconfont图标
  17. Arcgis空间连接
  18. Dev-C++ 提示源文件未编译,原因及解决办法
  19. HQChart钉钉小程序教程1-创建K线图
  20. 7个技巧帮助你进行更有吸引力的脉动/脉搏调查

热门文章

  1. MATLAB----光学之分量振幅反射率和分量振幅透射率
  2. Ubuntu18.04上传文件夹到github
  3. 【C++000】ASCII码转换公式(大小写转换)
  4. 爱陆通研习社,水利RTU、环保数采仪、遥测终端机定义,4G5G课堂
  5. Windows10系统电脑怎么查看自己电脑虚拟化技术是否开启?
  6. 微型计算机机箱配什么显卡,CPU显卡搭配建议
  7. Oracle HFM OHS服务无法启动
  8. FZU 2219 StarCraft (哈夫曼树)
  9. 【前端点击穿透】pointer-events属性详解
  10. flutter集成Apple第三方登录