- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
从图像中以亚像素精度检索像素矩形。
getRectSubPix 函数从 src 中提取像素:
p a t c h ( x , y ) = s r c ( x + center.x − ( dst.cols − 1 ) ∗ 0.5 , y + center.y − ( dst.rows − 1 ) ∗ 0.5 ) patch(x, y) = src(x + \texttt{center.x} - ( \texttt{dst.cols} -1)*0.5, y + \texttt{center.y} - ( \texttt{dst.rows} -1)*0.5) patch(x,y)=src(x+center.x−(dst.cols−1)∗0.5,y+center.y−(dst.rows−1)∗0.5)
其中非整数坐标处的像素值使用双线性插值进行检索。多通道图像的每个通道独立处理。此外,图像应该是单通道或三通道图像。虽然矩形的中心必须位于图像内部,但矩形的部分可能位于图像外部。
getRectSubPix 函数用于从源图像 src 中以亚像素精度提取一个矩形区域 patch。该函数能够以亚像素精度提取矩形区域,即使矩形的中心位置不在像素的整数坐标上也能进行精确提取。
函数原型
void cv::getRectSubPix
(InputArray image,Size patchSize,Point2f center,OutputArray patch,int patchType = -1
)
参数
- 参数image 源图像。
- 参数patchSize 提取的区域大小。
- 参数center 在源图像内提取的矩形中心的浮点坐标。中心必须位于图像内部。
- 参数 patch 提取的区域,其大小为 patchSize 并且与源图像具有相同的通道数。
- 参数 patchType 提取像素的深度,默认情况下,它们具有与源图像相同的深度。
代码示例
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{// 加载图像Mat src = imread("/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg");if (src.empty()){cout << "Error: Image not found." << endl;return -1;}// 定义矩形区域的大小Size patchSize(250, 200);// 定义矩形区域中心的坐标Point2f center(src.cols / 2.0f+70, src.rows / 2.0f+80);// 提取矩形区域Mat patch;getRectSubPix(src, patchSize, center, patch);// 显示原图像和提取的矩形区域namedWindow("Original Image", WINDOW_NORMAL);imshow("Original Image", src);namedWindow("Extracted Patch", WINDOW_NORMAL);imshow("Extracted Patch", patch);// 等待按键并关闭窗口waitKey(0);destroyAllWindows();return 0;
}