- 操作系統:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 編程語言:C++11
算法描述
cv::cuda::flip 是 OpenCV 的 CUDA 模塊中的一個函數,用于在 GPU 上對圖像或矩陣進行 翻轉(鏡像)操作。它類似于 CPU 版本的 cv::flip,但運行在 GPU 上,適用于 cv::cuda::GpuMat 數據。
函數原型
void cv::cuda::flip
(InputArray src,OutputArray dst,int flipCode,Stream& stream = Stream::Null()
)
參數
參數名 | 類型 | 描述 |
---|
|src I|nputArray |輸入圖像(可以是 cv::Mat 或 cv::cuda::GpuMat)。
|dst |OutputArray |輸出圖像(與輸入類型一致,通常為 cv::cuda::GpuMat)。
|flipCode |int |翻轉方式,見下文說明。
|stream |Stream& |CUDA 流對象,用于異步執行。默認為 Stream::Null(),即同步執行。
功能描述
該函數將輸入圖像按照指定方向進行翻轉:
- 水平翻轉(鏡像)
- 垂直翻轉
- 同時水平和垂直翻轉
常用于圖像增強、數據增強、預處理等場景。
翻轉方式 (flipCode:)
flipCode 值 | 含義 |
---|---|
0 | 垂直翻轉(上下翻轉 |
> 0 | 水平翻轉(左右翻轉) |
< 0 | 同時水平和垂直翻轉 |
等價于 CPU 版本的翻轉規則。
示例代碼
#include <opencv2/opencv.hpp>
#include <opencv2/cudaimgproc.hpp> // 必須包含這個頭文件才能使用 cuda::flipint main() {// 創建測試圖像(CPU)cv::Mat h_src = (cv::Mat_<uchar>(3, 4) <<1, 2, 3, 4,5, 6, 7, 8,9, 10, 11, 12);std::cout << "Original:\n" << h_src << std::endl;// 上傳到 GPUcv::cuda::GpuMat d_src;d_src.upload(h_src);// 創建輸出 GPU 圖像cv::cuda::GpuMat d_dst;// 執行翻轉操作:水平翻轉int flipCode = 1; // 水平翻轉cv::cuda::flip(d_src, d_dst, flipCode);// 下載回 CPU 并顯示結果cv::Mat h_dst;d_dst.download(h_dst);std::cout << "Flipped (horizontal):\n" << h_dst << std::endl;return 0;
}
輸出示例(水平翻轉):
Original:
[ 1, 2, 3, 4;5, 6, 7, 8;9, 10, 11, 12]Flipped (horizontal):
[ 4, 3, 2, 1;8, 7, 6, 5;12, 11, 10, 9]