大家好,欢迎大家学习OpenCV4.8 开发实战专栏,长期更新,不断分享源码。
专栏代码全部基于C++ 与Python双语演示,专栏答疑群 请联系微信 OpenCVXueTang_Asst
本文关键知识点:图像翻转(Image Flip)
图像翻转的本质像素映射,OpenCV支持三种图像翻转方式
- X轴翻转,flipcode = 0
- Y轴翻转, flipcode = 1
- XY轴翻转, flipcode = -1
相关的API - flip
- src输入参数
- dst 翻转后图像
- flipcode
在图像处理中,翻转(Flip)操作是指沿着一个或多个轴交换图像的像素。OpenCV 提供了一个方便的函数 cv::flip
来实现这一功能。该函数接受三个参数:输入图像 src
、输出图像 dst
和翻转代码 flipcode
。
翻转代码 flipcode
决定了翻转的方式:
flipcode = 0
:沿着 X 轴翻转(即水平翻转)。flipcode = 1
:沿着 Y 轴翻转(即垂直翻转)。flipcode = -1
:同时沿着 X 轴和 Y 轴翻转(即先水平翻转再垂直翻转,或者相反,效果相同)。
下面是一个使用 OpenCV 的 cv::flip
函数进行图像翻转的示例代码:
#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat src = cv::imread("image.jpg");if (src.empty()) {std::cerr << "Could not open or find the image!\n" << std::endl;return -1;}// 输出图像(翻转后的图像将存储在这里)cv::Mat dst;// 沿着 X 轴翻转cv::flip(src, dst, 0);// 如果你想查看结果,可以保存或显示翻转后的图像// cv::imwrite("flipped_x.jpg", dst);// cv::imshow("Flipped X", dst);// cv::waitKey(0); // 等待按键按下// 沿着 Y 轴翻转// cv::flip(src, dst, 1);// 如果想查看结果,同样可以保存或显示// 同时沿着 X 轴和 Y 轴翻转// cv::flip(src, dst, -1);// 如果想查看结果,同样可以保存或显示// 注意:每次翻转操作后,如果需要再次翻转,应该重新从原始图像 src 开始,或者清除 dst 后再次翻转return 0;
}
在上面的代码中,我们读取了一张名为 “image.jpg” 的图像,并使用 cv::flip
函数沿着 X 轴进行了翻转。翻转后的图像存储在 dst
Mat 对象中。你可以通过取消注释相关代码来查看或保存翻转后的图像。
请注意,每次调用 cv::flip
函数时,dst
都会被覆盖为新的翻转后的图像。如果你想保留多个翻转版本的图像,你需要在每次翻转之前创建一个新的 cv::Mat
对象来存储结果,或者将翻转后的图像保存到不同的文件。
此外,OpenCV 的 cv::imshow
函数用于在窗口中显示图像,而 cv::waitKey
函数则用于等待用户按键输入。这些函数在调试和可视化图像处理结果时非常有用。
演示代码
#include<opencv2/opencv.hpp>
#include<iostream>using namespace cv;
using namespace std;int main(int argc, char** argv) {Mat src = imread("D:/vcprojects/images/test.png");if (src.empty()) {printf("could not load image...\n");return -1;}imshow("input", src);Mat dst;// X Flip 倒影flip(src, dst, 0);imshow("x-flip", dst);// Y Flip 镜像flip(src, dst, 1);imshow("y-flip", dst);// XY Flip 对角flip(src, dst, -1);imshow("xy-flip", dst);waitKey(0);return 0;
}
python 代码演示
import cv2 as cv
import numpy as npsrc = cv.imread("D:/vcprojects/images/test.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)# X Flip 倒影
dst1 = cv.flip(src, 0);
cv.imshow("x-flip", dst1);# Y Flip 镜像
dst2 = cv.flip(src, 1);
cv.imshow("y-flip", dst2);# XY Flip 对角
dst3 = cv.flip(src, -1);
cv.imshow("xy-flip", dst3);# custom y-flip
h, w, ch = src.shape
dst = np.zeros(src.shape, src.dtype)
for row in range(h):for col in range(w):b, g, r = src[row, col]dst[row, w - col - 1] = [b, g, r]
cv.imshow("custom-y-flip", dst)cv.waitKey(0)
cv.destroyAllWindows()
结束语
学习贵在坚持,学习OpenCV贵在每一天的代码练习,原理跟基本的函数解释,相关知识,后续更新边学边理解,搞技术永远要坚持做长期主义者!我们一起努力!!!
专栏答疑群 请联系微信 OpenCVXueTang_Asst