c++ 如何将图片视角整体往上抬一抬代码,并且不改变图片大小
时间: 2024-03-13 08:46:48 浏览: 26
可以使用OpenCV库来处理图片,具体的代码如下:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读入图片
Mat img = imread("your_image_path.jpg");
// 定义平移矩阵
Mat trans_mat = (Mat_<double>(2,3) << 1, 0, 0, 0, 1, -50); // 往上平移50个像素
// 应用平移矩阵
warpAffine(img, img, trans_mat, img.size());
// 显示图片
imshow("trans_img", img);
waitKey(0);
return 0;
}
```
其中,`warpAffine`函数用来应用平移矩阵,第一个参数是输入的图片,第二个参数是输出的图片,第三个参数是平移矩阵,第四个参数是输出图片的大小。在本例中,我们把图片整体往上平移50个像素。
相关问题
c++ 如何将图片视角整体往上抬一抬代码,并且把黑框去掉
你可以使用 OpenCV 库来实现这个功能。
首先,你需要加载图片并将其转换为 OpenCV 的 Mat 对象。然后,你可以使用 `cv::warpAffine` 函数来实现平移操作。该函数需要一个变换矩阵和输入图像作为参数。这里我们只需要将变换矩阵的第二行元素设置为一个负数,即可将图像整体往上抬。具体代码如下:
```c++
#include <opencv2/opencv.hpp>
int main() {
cv::Mat img = cv::imread("input.jpg");
cv::Mat T = cv::Mat::zeros(2, 3, CV_32FC1);
T.at<float>(0, 0) = 1;
T.at<float>(1, 1) = 1;
T.at<float>(1, 2) = -50; // 向上平移 50 个像素
cv::Mat dst;
cv::warpAffine(img, dst, T, img.size());
cv::imshow("output", dst);
cv::waitKey();
return 0;
}
```
接下来,你可以使用 `cv::copyMakeBorder` 函数来去掉黑框。该函数需要输入图像、上下左右边界的大小、边界类型和填充颜色作为参数。这里我们将边界大小设置为负数,即可自动计算边界大小。具体代码如下:
```c++
#include <opencv2/opencv.hpp>
int main() {
cv::Mat img = cv::imread("input.jpg");
cv::Mat T = cv::Mat::zeros(2, 3, CV_32FC1);
T.at<float>(0, 0) = 1;
T.at<float>(1, 1) = 1;
T.at<float>(1, 2) = -50; // 向上平移 50 个像素
cv::Mat dst;
cv::warpAffine(img, dst, T, img.size());
cv::copyMakeBorder(dst, dst, -cvRound(dst.rows * 0.05), -cvRound(dst.rows * 0.05),
-cvRound(dst.cols * 0.05), -cvRound(dst.cols * 0.05),
cv::BORDER_CONSTANT, cv::Scalar(255, 255, 255));
cv::imshow("output", dst);
cv::waitKey();
return 0;
}
```
注意,这里我们将边界类型设置为 `cv::BORDER_CONSTANT`,并将填充颜色设置为白色。你可以根据需要修改这些参数。
如何将图像往上抬一抬,不改变原始尺寸c++
在 C++ 中,可以使用 OpenCV 库来完成将图像往上抬一抬的操作,同时不改变原始尺寸。具体实现步骤如下:
1. 加载图像并创建一个与原图像大小相同的空白图像,用于存储上抬后的图像。
2. 定义一个变换矩阵,将图像向上平移一定的距离。可以使用 cv::Mat 类型的变换矩阵实现。
3. 使用 cv::warpAffine() 函数对原始图像进行上抬操作,将变换后的图像存储到空白图像中。
4. 显示上抬后的图像。
下面是示例代码:
```c++
#include <opencv2/opencv.hpp>
int main()
{
// 加载图像
cv::Mat src = cv::imread("test.jpg");
// 创建空白图像
cv::Mat dst = cv::Mat::zeros(src.size(), src.type());
// 定义变换矩阵
cv::Mat M = (cv::Mat_<double>(2,3) << 1, 0, 0, 0, 1, -50);
// 上抬操作
cv::warpAffine(src, dst, M, dst.size());
// 显示原始图像和上抬后的图像
cv::imshow("src", src);
cv::imshow("dst", dst);
cv::waitKey();
return 0;
}
```
在上面的代码中,变换矩阵 M 采用了平移变换,将图像向上平移了 50 个像素的距离。可以根据实际情况调整平移距离和方向。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)