【树莓派学习笔记】五、处理、自动重命名并另存为图片

这篇博客介绍了如何在树莓派3B上,基于2021-05-07-raspios-buster-armhf版本,利用C++和OpenCV库实现图片的任意角度旋转。作者提供了源码`nanomain.cpp`,该代码通过最近邻插值法完成旋转,并展示了如何使用CMakeLists.txt进行编译。测试过程中,输入图片和旋转角度,程序会输出旋转后的图片并自动保存为新的文件名。
摘要由CSDN通过智能技术生成

平台:树莓派3B
版本: 2021-05-07-raspios-buster-armhf


编写源码

所用源码修改自【机器视觉学习笔记】最近邻插值实现图片任意角度旋转(C++)
在合适的地方编写源码

nano main.cpp
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

Mat RotateImage(Mat src, float angle)
{
	int x0, y0, x1, y1;
	angle = angle * 3.1415926535897932384626433832795 / 180;
	float sin_sita = sin(angle), cos_sita = cos(angle);
	Mat dst(abs((int)src.cols*sin_sita) + abs((int)src.rows*cos_sita), abs((int)src.cols*cos_sita) + abs((int)src.rows*sin_sita), CV_8UC3, Scalar(0));  //创建新图像
	for (x1 = 0; x1 < dst.cols; ++x1)
	{
		for (y1 = 0; y1 < dst.rows; ++y1)
		{
			float fx1, fy1;

			//将图片中点设为坐标原点
			fx1 = x1 - dst.cols / 2;
			fy1 = y1 - dst.rows / 2;

			//旧点直角坐标(坐标原点在角上)
			x0 = fx1*cos_sita - fy1*sin_sita + src.cols / 2 + 0.5;
			y0 = fx1*sin_sita + fy1*cos_sita + src.rows / 2 + 0.5;

			if (x0 >= 0 && x0 < src.cols && y0 >= 0 && y0 < src.rows)
			{
				dst.at<Vec3b>(Point(x1, y1)) = src.at<Vec3b>(Point(x0, y0));
			}
			else
				dst.at<Vec3b>(Point(x1, y1)) = 0;
		}
	}
	return dst;
}


int main(int argc, char * argv[])
{
	Mat src;
	Mat Output;
	String Name = argv[1];
	src = imread(argv[1]);
	Output = RotateImage(src, (float)stoi(argv[2]));
	imshow("原图", src);
	imshow("输出", Output);
	imwrite(Name.substr(0, Name.find('.')) + "_Output." + Name.substr(Name.find('.') + 1, Name.length() - Name.find('.') - 1), Output);
	waitKey(0);

	return 0;
}

在这里插入图片描述

编译

相同的目录下编写CMakeLists.txt文件

nano CMakeLists.txt
project(main)
set(OpenCV_DIR "/usr/local/include/opencv4")
find_package( OpenCV REQUIRED )
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(main main.cpp)
target_link_libraries(main ${OpenCV_LIBS})

在这里插入图片描述

其中/usr/local/include/opencv4为安装opencv后库的路径
不同的版本可能不同
在这里插入图片描述
配置编译环境并编译

cmake . 
make

在这里插入图片描述
在这里插入图片描述

测试

./main 4.jpg 45

在这里插入图片描述
如图可见输出图片已成功自动重命名另存为4_Output.jpg
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

乙酸氧铍

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

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

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

打赏作者

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

抵扣说明:

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

余额充值