Opencv 极坐标变换

变换后图片

代码

// 以Center为极坐标原点,将RowFrom到RowTo的圆环,仅仅变换该范围内的点,忽略掉其他部分。

cpp 复制代码
#include "polar_transeforme.hpp"
#include <string>

using namespace cv;



void calculate_map(int rouFrom, int rouTo, Point2d center, Mat& map)
{
	int heightDst = map.size().height;
	int widthDst = map.size().width;

	float dTheta = 2 * PAI / heightDst;

	for (int r = 0; r < heightDst; r++)
	{
		float* pRow = (float*)map.data + r * 2 * widthDst;
		float curTheta = r * dTheta;
		float cosTheta = cos(curTheta);
		float sinTheta = sin(curTheta);
		for (int c = 0; c < widthDst; c++)
		{
			float* pCur = pRow + c * 2;
			int rou = c + rouFrom;
			*pCur = rou * cosTheta + center.x;
			pCur++;
			*pCur = center.y - rou * sinTheta;
		}
	}
}


Mat polar_transeforme(Mat& oriImage, int rouFrom, int rouTo, Point2d center)
{
	int heightDst = 2 * PAI * rouFrom;
	int widthDst = rouTo - rouFrom;
	Mat map(Size(widthDst, heightDst), CV_32FC2);
	calculate_map(rouFrom, rouTo, center, map);

	Mat dstMat;
	remap(oriImage, dstMat, map, Mat(), INTER_CUBIC, 0);
	return dstMat;
}

Point2d polar2Origin(Point2d p, Point2d center, int rouFrom, float dTheta)
{
	float theta = p.y / rouFrom;
	float rou = p.x;
	float tempX = center.x + rou * sin(theta);
	float tempY = center.y - rou * cos(theta);
	return Point2d(tempX, tempY);
}


int main()
{
	const std::string strImagePath = "示例图片.jpg";
	Mat oriImg = imread(strImagePath, IMREAD_GRAYSCALE);
	Point2d center(237, 237);
	int rouFrom = 110;
	int rouTo = 230;
	
	Mat polarImg = polar_transeforme(oriImg, rouFrom, rouTo, center);

	int test = 0;
	return 0;
}
相关推荐
小阳哥AI工具2 分钟前
短剧/漫剧全流程起飞指南:从 0 到 1 打造爆款成片
人工智能·aigc
xwz小王子4 分钟前
【T-RO】全球首款集成手内视觉的仿生软体机器手,实现自主抓取与灵巧操作
人工智能·计算机视觉
新缸中之脑7 分钟前
如何在AI时代保持不可替代
人工智能
NocoBase9 分钟前
【2.0 教程】第 2 章:数据建模,两张表搞定工单系统
人工智能·开源·零代码·无代码
谁在黄金彼岸12 分钟前
把开源 Skills 集成到 LangGraph 项目
人工智能
AI英德西牛仔20 分钟前
deepseek导出word排版
人工智能·ai·chatgpt·deepseek·ds随心转
(; ̄ェ ̄)。20 分钟前
深度学习入门(十)RNN、LSTM、GRU
人工智能·rnn·深度学习
谁在黄金彼岸32 分钟前
构建一个多Agent系统(Multi-Agent System, MAS)方法论
人工智能
pandafeeder37 分钟前
Agent工具调用范式:ReAct 和Function Calling
人工智能
jinanwuhuaguo37 分钟前
OpenClaw字节跳动的三只不同的claw龙虾飞书妙搭 OpenClaw、ArkClaw、扣子 OpenClaw 核心区别深度解析
人工智能·语言模型·自然语言处理·visual studio code·openclaw