Task01:OpenCV框架、图像插值算法—图像缩放

1.配置虚拟环境

  • 创建:conda create -n openCV

  • 激活:conda activate openCV

  • 安装包:pip install opencv-python==3.4.1.15pip install opencv-contrib-python==3.4.1.15

    • 网上有教程说open CV3.4.2版本后有部分功能申请了专利,不能使用所以安装了3.4.1版本
  • 添加虚拟环境到 Jupyter Notebook

    conda activate openCV
    pip install --user ipykernel
    python -m ipykernel install --user --name=openCV
    

插值算法

最近邻插值法算法流程:

插值法放大图像的第一步都是相同的,计算新图的坐标点像素值对应原图中哪个坐标点的像素值来填充,计算公式为:

srcX = dstX * (srcWidth/dstWidth)

srcY = dstY * (srcHeight/dstHeight)

​ 其中,src表示旧图,dst表示新图。新图的坐标(dstX,dstY)对应于旧图的坐标(srcX,srcY)。 srcWidth/dstWidth 和 srcHeight/dstHeight 分别表示宽和高的放缩比。

​ 那么问题来了,通过这个公式算出来的 srcX,scrY (旧图坐标)有可能是小数,但是坐标点是不存在小数的,都是整数,得想办法把它转换成整数才行。

​ 不同插值法的区别就体现在 srcX,scrY 是小数时,怎么变成整数去取原图像中的像素值。

​ 最近邻插值法:看名字就很直白,四舍五入选取最接近的整数。这样的做法会导致像素的变化不连续,在新图中会产生锯齿。

例:将一幅3X3的图像放大到4X4

f(0,0)=h(0,0) 
f(0,1)=h(0,0.75)=h(0,1) 
f(0,2)=h(0,1.50)=h(0,2)
f(0,3)=h(0,2.25)=h(0,2)

代码复现:

resize函数:
cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)

对应参数:

InputArray src 输入图片
OutputArray dst 输出图片
Size 输出图片尺寸
fx, fy 沿x轴,y轴的缩放系数
interpolation 插入方式

interpolation 选项所用的插值方法:

INTER_NEAREST 最近邻插值
INTER_LINEAR 双线性插值(默认设置)
INTER_AREA 使用像素区域关系进行重采样。
INTER_CUBIC 4x4像素邻域的双三次插值
INTER_LANCZOS4 8x8像素邻域的Lanczos插值
imread函数:
imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种:
cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。
cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。
cv2.IMREAD_UNCHANGED:包括alpha,可以直接写-1。

Task01:OpenCV框架、图像插值算法—图像缩放_第1张图片

问题:用绝对路径加载图片会失败

你可能感兴趣的:(opencv,算法)