OpenCV学习笔记-尺寸调整

本文介绍了图像尺寸调整的应用及其在OpenCV中的实现,包括如何使用cvResize函数进行图像大小变换,以及不同插值方法(如最近邻插值、双线性插值、面积重采样和立方插值)的使用场景。通过示例代码演示了如何调整图像大小并显示调整后的图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尺寸调整应用到的函数为:

Resize
图像大小变换
void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );
src
输入图像.
dst
输出图像.
interpolation
插值方法:
CV_INTER_NN - 最近邻插值,
CV_INTER_LINEAR - 双线性插值 (缺省使用)
CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法..
CV_INTER_CUBIC - 立方插值.
函数 cvResize 将图像 src 改变尺寸得到与 dst 同样大小。若设定 ROI,函数将按常规支持 ROI.

例题如下:

//版权所有:李立宗
//lilizong【at】Gmail

#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#include <math.h>
int main(int argc, char* argv[])
{
	IplImage *src = 0;   //源图像指针
	IplImage *dst1 = 0;   //目标图像指针1
	IplImage *dst2 = 0;   //目标图像指针1
	float scale1 = 0.5;  //缩放为原始图片的一半大小
	float scale2 = 2;  //缩放为原始图片的一倍大小
	CvSize dst1_cvsize;   //目标图像1尺寸
	CvSize dst2_cvsize;   //目标图像2尺寸
	src = cvLoadImage("guagua.bmp");
	dst1_cvsize.width = src->width * scale1;  //目标图像1的宽为源图象宽的scale1倍
	dst1_cvsize.height = src->height * scale1; //目标图像1的高为源图象高的scale1倍
	dst2_cvsize.width = src->width * scale2;  //目标图像2的宽为源图象宽的scale2倍
	dst2_cvsize.height = src->height * scale2; //目标图像2的高为源图象高的scale2倍
	dst1 = cvCreateImage( dst1_cvsize, src->depth, src->nChannels); //构造目标图象1
	dst2 = cvCreateImage( dst2_cvsize, src->depth, src->nChannels); //构造目标图象2
	cvResize(src, dst1, CV_INTER_LINEAR); //缩放源图像到目标图像1
	cvResize(src, dst2, CV_INTER_LINEAR); //缩放源图像到目标图像2
	cvNamedWindow( "src",   CV_WINDOW_AUTOSIZE ); //创建用于显示源图像的窗口
	cvNamedWindow( "dst1",   CV_WINDOW_AUTOSIZE ); //创建用于显示目标图像1的窗口
	cvNamedWindow( "dst2",   CV_WINDOW_AUTOSIZE ); //创建用于显示目标图像2的窗口
	cvShowImage( "src", src );  //显示源图像
	cvShowImage( "dst1", dst1 );  //显示目标图像1
	cvShowImage( "dst2", dst2 );  //显示目标图像2
	cvWaitKey(-1);  //等待用户响应
	cvReleaseImage(&src); //释放源图像占用的内存
	cvShowImage( "dst1", dst1 );  //显示目标图像1
	cvShowImage( "dst2", dst2 );  //显示目标图像2
	cvDestroyWindow( "src" ); //销毁窗口“src”
	cvDestroyWindow( "dst1" ); //销毁窗口“dst”
	cvDestroyWindow( "dst2" ); //销毁窗口“dst”
}

运行结果为:


参考文献:

1.学习OpenCV,刘瑞祯,于仕祺,清华大学出版社,pp.149-150

2.OpenCV中文网,http://www.opencv.org.cn/index.php/Cv%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86

### 关于OpenCV中霍夫圆检测的学习教程 #### 霍夫圆检测简介 霍夫圆检测是一种用于识别图像中圆形物体的技术。该方法通过参数空间累加投票的方式找到可能存在的圆心位置及其半径大小[^1]。 #### 实现过程概述 为了实现霍夫圆检测,通常遵循以下几个主要步骤: - **转换为灰度图**:对于彩色输入图片来说,第一步是要将其转化为单通道的灰度形式以便后续处理。 - **降噪预处理**:采用诸如高斯滤波的方法去除不必要的细节干扰,使得边缘更加清晰明显[^3]。 - **提取轮廓线**:利用像Canny这样的算子来进行边界捕捉操作,从而获得目标对象的大致外形特征。 - **执行Hough变换**:调用`cv2.HoughCircles()`函数完成实际的圆周定位工作;此阶段涉及设定多个重要参数以控制精度和效率之间的平衡关系。 - **可视化结果**:最后一步是在原图中标记出所发现的所有符合条件的圆形区域供进一步分析或展示用途。 下面是具体的Python代码实例来说明如何运用上述流程进行简单的霍夫圆检测任务: ```python import cv2 import numpy as np # 加载测试样本并调整尺寸方便显示 img = cv2.imread('coins.jpg') output = img.copy() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 应用轻微模糊效果降低随机噪声影响 blurred = cv2.GaussianBlur(gray, (9, 9), 2) # 执行边缘探测算法得到初步形状线索 edges = cv2.Canny(blurred, threshold1=50, threshold2=150) # 进行霍夫变换查找潜在的圆形结构 circles = cv2.HoughCircles(edges, method=cv2.HOUGH_GRADIENT_ALT, dp=1.5, minDist=80, param1=400, param2=0.85, minRadius=20, maxRadius=100) if circles is not None: detected_circles = np.uint16(np.around(circles)) for circle in detected_circles[0]: center_x, center_y, radius = circle # 绘制外接矩形框包围每一个被确认下来的圈状物 cv2.circle(output, (center_x, center_y), radius, color=(0, 255, 0), thickness=2) # 同时也标记中心点坐标作为辅助参考信息 cv2.circle(output, (center_x, center_y), 2, color=(0, 0, 255), thickness=-1) # 展示最终成果给用户查看 cv2.imshow("Detected Circles", output) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段脚本展示了完整的从读取文件直至渲染图形输出整个链条上的各个环节,并且包含了必要的配置选项让读者能够轻松复制运行起来观察具体行为表现。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值