opencv

您所在的位置:网站首页 图像的放大与缩小知识点归纳 opencv

opencv

#opencv| 来源: 网络整理| 查看: 265

opencv-python,对图像进行缩放、降低灰度分辨率,观察图像变化 一、在开始之前知识点、方法 二、开始对一张图像进行缩放,观察其分辨率和图像变化使用cv2.resize缩放图像观察其分辨率和图像变化 三、降低灰度分辨率,观察图像变化降低灰度分辨率观察图像变化

一、在开始之前 知识点、方法

本次教程涉及到的知识点: 图像分辨率: 指图像中存储的信息量,是每英寸图像内有多少个像素点,分辨率的单位为PPI(Pixels Per Inch),通常叫做像素每英寸。对于计算机的显示系统来说,一幅图像的PPI值是没有意义的,起作用的是这幅图像所包含的总的像素数, 也就是另一种分辨率表示方法:水平方向的像素数×垂直方向的的像素数。 灰度分辨率: 在数字图像处理教程中,灰度分辨率指的是色阶, 色阶是表示图像亮度强弱的指数标准,也就是我们说的色彩指数。 灰度分辨率指亮度,和颜色无关,但最亮的只有白色,最不亮的只有黑色。 方法 cv2.resize(): 其第一个参数为待缩放的图像, 第二个参数为缩放后的图像尺寸大小,如(640,480) 第三个和第四个参数为缩放尺度因子, 第五个参数为缩放的插值方法。 插值方法: 默认时使用的是cv2.INTER_LINEAR缩小时推荐使用cv2.INTER_AREA 扩展放大时推荐使用cv2.INTER_CUBIC 和 cv2.INTER_LINEAR,前者比后者运行速度慢。 码云代码地址:https://gitee.com/steveqobs/opencv chapter2

二、开始

先引入cv2 和numpy。确定要用的图片

import cv2 img = cv2.imread('img/lena.png') 对一张图像进行缩放,观察其分辨率和图像变化 使用cv2.resize缩放图像

1、第一种缩放方法,使用 shape 获取图片的长和宽 2、缩放-放大:使用cv2.resize,在第二个参数中给定两倍的长和宽 这种方法的缺点是每次要读取原图的长宽 3、print函数打印出图片的分辨率 4、缩放-缩小:在缩小图片的时候,我用了第二种,在第3 、4参数中给定0.5 的比例,长和宽缩小一半

# 第一种缩放方法,用resize(),在第二个参数给定尺寸大小。这里长和宽放大两倍 height, width = img.shape[:2] # img.shape=(512,512,3) 数组分别代表的是图像的高、宽、通道,上面这句将前两个数值赋给了height和width下面要用到 print("原图分辨率:", height, "*", width) enlarge = cv2.resize(img, (2 * width, 2 * height)) print("缩放:放大后:", enlarge.shape[:2]) # 上一句默认插值方法参数为cv2.INTER_LINEAR 这句也可以: # enlarge = cv2.resize(img, (2 * width, 2 * height), interpolation=cv2.INTER_CUBIC) # 第二种缩放方法,用resize(),在第三、四参数给定缩放比例。这里长和宽缩小到0.5倍。好处是不用读取长宽了 # enlarge = cv2.resize(img, None, fx=1.5, fy=1.5, interpolation=cv2.INTER_CUBIC) shrink = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC) print("缩放:缩小后:", shrink.shape[:2]) # None是输出图像的尺寸大小,fx和fy是缩放因子 # cv2.INTER_CUBIC 是插值方法,一般默认为cv2.INTER_LINEAR cv2.imshow('enlarge', enlarge) cv2.imshow('shrink', shrink) cv2.imshow('img', img) cv2.waitKey(0) 观察其分辨率和图像变化

从左到右依次为,缩小、原图、放大

在这里插入图片描述

控制台输出的结果如下: (显示了图像的长和宽,图像变大了,实际上图像分辨率是降低了的。 假如原图是100ppi,放大后图像分辨率就是50ppi) 在这里插入图片描述

三、降低灰度分辨率,观察图像变化 降低灰度分辨率 # 下面函数先量化到level+1级,再量化至256级以显示 def reduce_intensity_levels(img, level): img = cv2.copyTo(img, None) for x in range(img.shape[0]): for y in range(img.shape[1]): si = img[x, y] ni = int(level * si / 255 + 0.5) * (255 / level) img[x, y] = ni return img src = cv2.imread('img/lena.png') # cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片 gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) # 量化到8级 result8 = reduce_intensity_levels(gray, 7) # 量化到2级 result2 = reduce_intensity_levels(gray, 1) cv2.imshow('src', src) cv2.imshow('gray', gray) cv2.imshow('result8', result8) cv2.imshow('result2', result2) cv2.waitKey(0) 观察图像变化

先将原图转换成灰度级图片了 在这里插入图片描述左边是灰度图片,右边两个 降低灰度分辨率 灰度级数通常是2的整数次幂 中间是8 ,右边是2

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3