热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

无OpenCV的图像处理|Python

无OpenCV的图像处理|Python原文:https:/

无 OpenCV 的图像处理| Python

原文:https://www . geesforgeks . org/image-processing-不带-opencv-python/

我们知道 OpenCV 被广泛用于对图像进行操作,并且具有广泛的功能。但是如果我们想在不使用任何像 OpenCV 这样的外部库的情况下处理图像文件呢。让我们看看如何才能做到这一点。

图像缩放(使用最近邻插值):

最近邻插值是最简单的插值方式。该方法简单地确定“最近的”相邻像素,并假定其强度值。
假设 p > m 和 q > n,考虑一个小图像,它的像素宽为“w ”,高为“h ”,我们希望将它的像素宽重新调整为“p ”,高为“q”。现在,我们需要两个缩放常数:

scale_x = p/w
scale_y = q/h

现在,我们只需遍历输出图像中的所有像素,通过按 scale_xscale_y 缩放我们的控制变量,并对结果缩放的索引值进行舍入,来寻址要复制的源像素。
图片表示:
3x 3 像素的图像(总共 9 个像素),现在如果我们想将图像的大小增加到 6X6 那么,根据最近邻算法 6/3(即 2 个)像素应该与原始图像中的像素具有相同的 RGB 值。

图像缩放程序:

Python 3

# using matplotlib and numpy
import matplotlib.image as img
import numpy as npy
# provide the location of image for reading
m = img.imread("taj.png");
# determining the length of original image
w, h = m.shape[:2];
# xNew and yNew are new width and
# height of image required
after scaling
xNew = int(w * 1 / 2);
yNew = int(h * 1 / 2);
# calculating the scaling factor
# work for more than 2 pixel
xScale = xNew/(w-1);
yScale = yNew/(h-1);
# using numpy taking a matrix of xNew
# width and yNew height with
# 4 attribute [alpha, B, G, B] values
newImage = npy.zeros([xNew, yNew, 4]);
for i in range(xNew-1):
   for j in range(yNew-1):
       newImage[i + 1, j + 1]= m[1 + int(i / xScale),
                                 1 + int(j / yScale)]
# Save the image after scaling
img.imsave('scaled.png', newImage);

输出:

图像的灰度缩放:

使用平均值方法,该方法突出显示像素的强度,而不是显示它包含哪些 RGB 值。当我们计算 RGB 的平均值并将其分配给像素的 RGB 值时,由于像素的 RGB 值是相同的,所以它将不能创建任何颜色,因为所有的颜色都是由于 RGB 值的不同比率而形成的,因为在这种情况下比率将是 1:1:1。因此,随后形成的图像将看起来像灰色图像。
绘画作品:

对图像进行灰度缩放的程序:

Python 3

# using numpy
import numpy as npy
# using matplotlib
import matplotlib.image as img
# using statistics to import mean
# for mean calculation
from statistics import mean
m = img.imread("taj.png")
# determining width and height of original image
w, h = m.shape[:2]
# new Image dimension with 4 attribute in each pixel
newImage = npy.zeros([w, h, 4])
print( w )
print( h )
for i in range(w):
   for j in range(h):
      # ratio of RGB will be between 0 and 1
      lst = [float(m[i][j][0]), float(m[i][j][1]), float(m[i][j][2])]
      avg = float(mean(lst))
      newImage[i][j][0] = avg
      newImage[i][j][1] = avg
      newImage[i][j][2] = avg
      newImage[i][j][3] = 1 # alpha value to be 1
# Save image using imsave
img.imsave('grayedImage.png', newImage)

输出:

图像裁剪:

裁剪基本上是去除不想要的像素。这可以通过在不同的图像网格中获取所需的像素来完成,该网格的大小是裁剪后所需的大小。
考虑一个大小为 10×10 像素的图像,如果我们要求只裁剪图像中心的 4×4 像素,那么我们需要从(3,3)开始收集(10-4)/2 的像素值,在 x 方向最多 4 个像素,在 y 方向最多 4 个像素。
绘画作品:

裁剪图像的程序:

Python 3

# using matplotlib and numpy
import matplotlib.image as img
import numpy as npy
# reading image in variable m
m = img.imread("taj.png")
# determining dimension of image width(w) height(h)
w, h = m.shape[:2]
# required image size after cropping
xNew = int(w * 1 / 4)
yNew = int(h * 1 / 4)
newImage = npy.zeros([xNew, yNew, 4])
# print width height of original image
print(w)
print(h)
for i in range(1, xNew):
    for j in range(1, yNew):
       # cropping start from 100, 100 pixel of original image
        newImage[i, j]= m[100 + i, 100 + j]
# save image
img.imsave('cropped.png', newImage)

输出:


推荐阅读
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍如何使用 Python 编写程序,检查给定列表中的元素是否形成交替峰值模式。我们将探讨两种不同的方法来实现这一目标,并提供详细的代码示例。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • andr ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
author-avatar
点燃半吱煙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有