Opencv-图像插值

知识点

图像插值(Image Interpolation)
最常见四种插值算法
INTER_NEAREST = 0
INTER_LINEAR = 1
INTER_CUBIC = 2
INTER_LANCZOS4 = 4
相关的应用场景
几何变换、透视变换、插值计算新像素
resize,如果size有值,使用size做放缩插值,否则根据fx与fy卷积
关于这四种插值算法的详细代码实现与解释:
图像处理之三种常见双立方插值算法
图像放缩之双立方插值
图像放缩之双线性内插值
图像处理之Lanczos采样放缩算法

python代码

import cv2 as cv

src = cv.imread("C:/Users/qqxd/Desktop/opencvcode/images/test.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)

h, w = src.shape[:2]
print(h, w)
dst = cv.resize(src, (int(w*1.5),int( h*1.5)), fx=0.75, fy=0.75, interpolation=cv.INTER_NEAREST)
cv.imshow("INTER_NEAREST", dst)

dst = cv.resize(src, (int(w*1.5),int( h*1.5)), interpolation=cv.INTER_LINEAR)
cv.imshow("INTER_LINEAR", dst)

dst = cv.resize(src, (int(w*1.5),int( h*1.5)), interpolation=cv.INTER_CUBIC)
cv.imshow("INTER_CUBIC", dst)

dst = cv.resize(src,(int(w*1.5),int( h*1.5)), interpolation=cv.INTER_LANCZOS4)
cv.imshow("INTER_LANCZOS4", dst)

cv.waitKey(0)
cv.destroyAllWindows()

c++代码

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	Mat src = imread("C:/Users/qqxd/Desktop/opencvcode/images/test.png");
	if (src.empty()) {
		printf("could not load image...\n");
		return -1;
	}
	imshow("input", src);

	int h = src.rows;
	int w = src.cols;
	float fx = 0.0, fy = 0.0;
	Mat dst = Mat::zeros(src.size(), src.type());
	resize(src, dst, Size(w * 2, h * 2), fx = 0, fy = 0, INTER_NEAREST);
	imshow("INTER_NEAREST", dst);

	resize(src, dst, Size(w * 2, h * 2), fx = 0, fy = 0, INTER_LINEAR);
	imshow("INTER_LINEAR", dst);

	resize(src, dst, Size(w * 2, h * 2), fx = 0, fy = 0, INTER_CUBIC);
	imshow("INTER_CUBIC", dst);

	resize(src, dst, Size(w * 2, h * 2), fx = 0, fy = 0, INTER_LANCZOS4);
	imshow("INTER_LANCZOS4", dst);

	waitKey(0);
	return 0;
}

运行结果如下:
在这里插入图片描述
在这里插入图片描述

<think>好的,我现在需要处理用户关于OpenCV-Python图像处理基础教程的请求。首先,用户希望学习基础知识,所以我要确保覆盖核心内容,同时遵循系统级指令,比如正确使用LaTeX格式和生成相关问题。 首先,我应该整理OpenCV-Python的基础知识模块。用户提到的引用内容涉及图像变换、增强、复原,以及实战项目,比如滤波、分割、特征提取。还有具体的代码示例,比如高通滤波器用于锐化图像。这些可以作为教程的结构参考。 接下来,我需要确保回答结构清晰,分步骤讲解。可能的基础部分包括安装、读取显示图像、像素操作、颜色空间转换、图像几何变换、滤波处理、形态学操作、边缘检测、图像阈值处理、轮廓检测等。每个部分需要简要说明,并附上代码示例,如用户提供的锐化代码来自引用[2]。 同时,系统指令要求行内数学表达式用$...$,例如卷积核的操作可能需要数学表达,比如$kernel = \begin{bmatrix}-1 & -1 & -1\\ -1 & 9 & -1\\ -1 & -1 & -1\end{bmatrix}$。独立公式用$$...$$,但当前内容可能不需要复杂的公式,所以暂时注意在需要时正确应用。 生成相关问题方面,需考虑用户可能进一步询问的内容,比如不同滤波器的区别、边缘检测算法比较、颜色空间转换的应用等。需要确保问题覆盖教程提到的各个部分,帮助用户深入理解。 需要检查引用标识是否正确添加,例如在提到图像锐化时引用[^2],在提到OpenCV函数优势时引用[^3]。注意引用内容要与用户提供的参考文献对应,避免错误。 最后,确保语言简洁明了,符合中文表达习惯,避免术语错误,代码示例正确无误。可能还需要检查LaTeX语法是否正确,比如积分符号或矩阵的格式是否正确。现在将这些思路整合成一个结构化的教程,并生成相关问题。</think>### OpenCV-Python 图像处理基础教程 #### 1. 安装与环境配置 首先安装 OpenCV-Python 库: ```bash pip install opencv-python ``` #### 2. 图像读取与显示 ```python import cv2 # 读取图像(参数:文件路径,读取模式) img = cv2.imread('image.jpg', cv2.IMREAD_COLOR) # 显示图像(参数:窗口标题,图像数据) cv2.imshow('Image', img) cv2.waitKey(0) # 等待按键 cv2.destroyAllWindows() # 关闭窗口 ``` #### 3. 像素操作与颜色空间 - **像素访问**:图像数据以 NumPy 数组存储,例如 `img[100, 200]` 表示第 100 行、200 列的像素值。 - **颜色空间转换**(如 RGB → 灰度): $$ \text{Gray} = 0.299R + 0.587G + 0.114B $$ ```python gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ``` #### 4. 图像几何变换 - **缩放**:使用双线性插值法: ```python resized = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_LINEAR) ``` - **旋转**:绕中心点旋转$30^\circ$: ```python M = cv2.getRotationMatrix2D((width/2, height/2), 30, 1) rotated = cv2.warpAffine(img, M, (width, height)) ``` #### 5. 图像滤波处理 - **高斯模糊**:用于降噪,核大小为$5 \times 5$: ```python blurred = cv2.GaussianBlur(img, (5,5), 0) ``` - **锐化**(使用高通滤波器)[^2]: ```python kernel = np.array([[-1, -1, -1], [-1, 9, -1], [-1, -1, -1]]) sharpened = cv2.filter2D(img, -1, kernel) ``` #### 6. 边缘检测 - **Canny 算法**: ```python edges = cv2.Canny(gray_img, threshold1=100, threshold2=200) ``` #### 7. 图像阈值处理 ```python ret, binary = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY) ``` #### 8. 轮廓检测 ```python contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img, contours, -1, (0,255,0), 2) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值