返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言OpenCV实现柱面投影
  • 519
分享到

C语言OpenCV实现柱面投影

2024-04-02 19:04:59 519人浏览 薄情痞子
摘要

目录前言实现代码针对彩色图像针对灰度图像前言 在做全景拼接的时候,为了保持图片中的空间约束与视觉的一致性,需要进行柱面投影,否则离中心图像距离越远的图像拼接后变形越大。 柱面投影公式

前言

在做全景拼接的时候,为了保持图片中的空间约束与视觉的一致性,需要进行柱面投影,否则离中心图像距离越远的图像拼接后变形越大。

柱面投影公式为

实现代码

针对彩色图像


int main()
{
	cv::Mat image1 = cv::imread("images/1.jpg", 1);
	if (!image1.data)
		return 0;
	imshow("image1", image1);
 
	Mat imGout = Mat(image1.rows, image1.cols, CV_8UC3);
	float w = image1.cols;
	float h = image1.rows;
	float f = (w / 2) / atan(PI / 8);
 
	for (int i = 0; i < image1.rows; i++)
	{
		for (int j = 0; j < image1.cols; j++)
		{
			float x = j;
			float y = i;
			float x1 = f * atan((x - w / 2) / f) + f * atan(w / (2.0f * f));
			float y1 = f * (y - h / 2.0f) / sqrt((x - w / 2.0f) * (x - w / 2.0f) + f * f) + h / 2.0f;
 
			int col = (int)(x1 + 0.5f);//加0.5是为了四舍五入
			int row = (int)(y1 + 0.5f);//加0.5是为了四舍五入
 
			if (col < image1.cols && row < image1.rows)
			{
				imgOut.at<Vec3b>(row, col)[0] = image1.at<Vec3b>(i, j)[0];
				imgOut.at<Vec3b>(row, col)[1] = image1.at<Vec3b>(i, j)[1];
				imgOut.at<Vec3b>(row, col)[2] = image1.at<Vec3b>(i, j)[2];
			}
		}
	}
 
	imshow("imgOut", imgOut);
 
	waiTKEy(0);
	return 0;
}

实现效果

针对灰度图像


cv::Mat image1 = cv::imread("E:\\zcb_work\\2113\\pic2\\k.jpg", 0);
	if (!image1.data)
		return 0;
	imshow("image1", image1);

	cv::Mat image2 = cv::imread("E:\\zcb_work\\2113\\pic2\\j.jpg", 0);
	if (!image2.data)
		return 0;
	imshow("image2", image2);

 	Mat imgOut1 = Mat(image1.rows, image1.cols, CV_8UC1);
	imgOut1.setTo(0);
	Mat imgOut2 = Mat(image2.rows, image2.cols, CV_8UC1);
	imgOut2.setTo(0);
	
	float w = image1.cols;
	float h = image1.rows;
	float f = (w / 2) / atan(PI / 8);
 
	for (int i = 0; i < image1.rows; i++)
	{
		for (int j = 0; j < image1.cols; j++)
		{
			float x = j;
			float y = i;
			float x1 = f * atan((x - w / 2) / f) + f * atan(w / (2.0f * f));
			float y1 = f * (y - h / 2.0f) / sqrt((x - w / 2.0f) * (x - w / 2.0f) + f * f) + h / 2.0f;
 
			int col = (int)(x1 + 0.5f);//加0.5是为了四舍五入
			int row = (int)(y1 + 0.5f);//加0.5是为了四舍五入
 
			if (col < image1.cols && row < image1.rows)
			{
				imgOut1.at<uchar>(row, col) = image1.at<uchar>(i, j);
				imgOut2.at<uchar>(row, col) = image2.at<uchar>(i, j);
				//imgOut.at<Vec3b>(row, col)[1] = image1.at<Vec3b>(i, j)[1];
				//imgOut.at<Vec3b>(row, col)[2] = image1.at<Vec3b>(i, j)[2];
			}
		}
	}
 
	imshow("imgOut1", imgOut1);
	imshow("imgOut2", imgOut2);

实现效果

原图

柱面投影

用surf算法,特征检测,

合成这样,呵呵呵,

 

以上就是C语言 OpenCV实现柱面投影的详细内容,更多关于C语言 OpenCV柱面投影的资料请关注编程网其它相关文章!

--结束END--

本文标题: C语言OpenCV实现柱面投影

本文链接: https://lsjlt.com/news/160859.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言OpenCV实现柱面投影
    目录前言实现代码针对彩色图像针对灰度图像前言 在做全景拼接的时候,为了保持图片中的空间约束与视觉的一致性,需要进行柱面投影,否则离中心图像距离越远的图像拼接后变形越大。 柱面投影公式...
    99+
    2024-04-02
  • C语言中OpenCV怎样实现柱面投影
    C语言中OpenCV怎样实现柱面投影,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言在做全景拼接的时候,为了保持图片中的空间约束与视觉的一致性,需要进行柱面投影,否则离中心图...
    99+
    2023-06-22
  • C语言中怎么用OpenCV实现柱面投影
    在C语言中使用OpenCV实现柱面投影的步骤如下: 导入OpenCV库: #include <opencv2/core/c...
    99+
    2024-04-02
  • 利用C++ OpenCV 实现从投影图像恢复仿射特性
    目录原理实现思路主要代码原理 我们通过相机拍摄的图片存在各种畸变,其中投影畸变使得原本平行的直线不再平行,就会产生照片中近大远小的效果,要校正这一畸变,书中给了很多方法,这里是其中的...
    99+
    2024-04-02
  • 如何利用C++ OpenCV 实现从投影图像恢复仿射特性
    如何利用C++ OpenCV 实现从投影图像恢复仿射特性,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。原理我们通过相机拍摄的图片存在各种畸变,其中投影畸...
    99+
    2023-06-21
  • OpenCV(python)版实现文本分割之水平投影法
    对于如下一张图片,如何将文本区域分割成一行一行的了? 在文本分割领域中有一种很优秀的算法:投影法,包括水平投影法和垂直投影法。本文主要讲述水平投影法,水平投影法可以理解为一束光线从...
    99+
    2024-04-02
  • 基于OpenCV(python)的实现文本分割之垂直投影法
    在我的上一篇博客中讲述了水平投影法取出文本行图像的实现,在这里将用垂直投影法对文本行的每个字符进行分割。下图是用水平投影法切割的文本行: 文本分割的原理如下,先用水平投影取出单一文...
    99+
    2024-04-02
  • Linux页面置换算法的C语言实现
    Linux页面置换算法的C语言实现 编写算法,实现页面置换算法FIFO、LRU、OPT;针对内存地址引用串,进行页面置换算法进行页面置换。 其中,算法所需的各种参数由输入产生(手工输入或者随机数产生);输出内存驻留的...
    99+
    2022-06-03
    Linux C语言 页面置换
  • C语言怎么实现页面置换算法
    本篇内容主要讲解“C语言怎么实现页面置换算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现页面置换算法”吧!1.实现效果2.实现源代码 #include<iostr...
    99+
    2023-06-25
  • c语言游戏欢迎界面怎么实现
    要实现一个C语言游戏的欢迎界面,可以使用以下步骤:1. 导入所需的头文件和库,例如stdio.h和windows.h(如果是Wind...
    99+
    2023-10-11
    c语言
  • C语言实现页面置换算法(FIFO、LRU)
    目录1.实现效果2.实现源代码 1.实现效果 2.实现源代码  #include<iostream> #include<process.h> #inc...
    99+
    2024-04-02
  • 用C语言怎样实现面向对象思想
    本篇内容介绍了“用C语言怎样实现面向对象思想”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1, 基本信息众所周知,C语言是结构化和模块化,面...
    99+
    2023-06-16
  • C语言实现计算圆周长以及面积
    目录C语言计算圆周长及面积题目主要思想两种方法求圆的面积与周长编程方法一:程序如下方法二:程序如下 C语言计算圆周长及面积 题目 从键盘上获取圆的半径,计算圆的周长以及面积...
    99+
    2022-11-13
    C语言计算圆周长 C语言计算面积 计算圆周长
  • C语言冒泡排序超全面实现流程
    目录普通版冒泡排序qosrt函数终极版冒泡排序终极版冒泡排序整体测试代码普通版冒泡排序 冒泡排序想必大家都很了解了吧,冒泡排序的算法思想就是两两比大小,一轮一轮比,每比完一轮排出一个...
    99+
    2023-01-13
    C语言冒泡排序原理 C语言冒泡排序算法
  • C/C++使用C语言实现多态
    目录1.多态的概念1.1什么是多态?1.2为什么要用多态呢?1.3多态有什么好处?2.多态的定义及实现2.1继承中构成多态的条件2.2虚函数2.3虚函数的重写2.4C++11 ove...
    99+
    2024-04-02
  • C语言实现实时钟表
    本文实例为大家分享了C语言实现实时钟表的具体代码,供大家参考,具体内容如下 一、最终效果展示 效果图如下: 二、绘制静态秒针 代码如下: #include<graphics...
    99+
    2024-04-02
  • C语言实现enum枚举
    枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。 枚举语法定义格式为: enum 枚举名 {枚举元素1,枚举元素2,……}; 接下来我们举个例子,比如:一星期有 7...
    99+
    2024-04-02
  • C语言实现UDP通信
    UDP通信 UDP是一种无连接的尽最大努力交付的不可靠连接,通信之前无需先建立连接,自然而然,通信之后也就无需再释放连接。 通信的套接字 UDP所采用的通信接口与前面讲过的TCP通信...
    99+
    2024-04-02
  • C语言实现SOCKET编程
    以下是一个简单的C语言示例,演示了如何使用socket编程创建一个简单的服务器和客户端。在此示例中,服务器将侦听来自客户端的消息并将...
    99+
    2023-09-27
    c语言
  • C语言实现wave波形
    题目描述 一个n列的网格,从(0,0)网格点出发,波形存在平波(从(x,y)到(x+1,y)),上升波(从(x,y)到(x+1,y+1)),下降波(从(x,y)到(x+1,y−1))...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作