欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言 OpenCV實(shí)現(xiàn)柱面投影

 更新時(shí)間:2021年12月25日 15:27:42   作者:rjszcb  
在做全景拼接的時(shí)候,為了保持圖片中的空間約束與視覺(jué)的一致性,需要進(jìn)行柱面投影,否則離中心圖像距離越遠(yuǎn)的圖像拼接后變形越大。本文將具體介紹一下這如何實(shí)現(xiàn),需要的可以參考一下

前言

在做全景拼接的時(shí)候,為了保持圖片中的空間約束與視覺(jué)的一致性,需要進(jìn)行柱面投影,否則離中心圖像距離越遠(yuǎn)的圖像拼接后變形越大。

柱面投影公式為

實(shí)現(xiàn)代碼

針對(duì)彩色圖像

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;
}

實(shí)現(xiàn)效果

針對(duì)灰度圖像

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);

實(shí)現(xiàn)效果

原圖

柱面投影

用surf算法,特征檢測(cè),

合成這樣,呵呵呵,

?

以上就是C語(yǔ)言 OpenCV實(shí)現(xiàn)柱面投影的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言 OpenCV柱面投影的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++類模板與函數(shù)模板基礎(chǔ)詳細(xì)講解

    C++類模板與函數(shù)模板基礎(chǔ)詳細(xì)講解

    C++語(yǔ)言的模板技術(shù)包括函數(shù)模板和類模板,模板技術(shù)是一種代碼重用技術(shù),函數(shù)和類是C++語(yǔ)言中兩種主要的重用代碼形式,這篇文章主要介紹了C++函數(shù)模板和類模板,需要的朋友可以參考下
    2022-08-08
  • 一文詳解C語(yǔ)言中的switch語(yǔ)句和while循環(huán)

    一文詳解C語(yǔ)言中的switch語(yǔ)句和while循環(huán)

    這篇文章主要給大家詳細(xì)介紹了C語(yǔ)言中的switch語(yǔ)句和while循環(huán),文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • C++中的操作符重載詳細(xì)解析

    C++中的操作符重載詳細(xì)解析

    運(yùn)算符重載后不能改變運(yùn)算符的操作對(duì)象(操作數(shù))的個(gè)數(shù);如:"+"是實(shí)現(xiàn)兩個(gè)操作數(shù)的運(yùn)算符,重載后仍然為雙目運(yùn)算符
    2013-09-09
  • C++實(shí)現(xiàn)基于時(shí)序公平的讀寫鎖詳解

    C++實(shí)現(xiàn)基于時(shí)序公平的讀寫鎖詳解

    讀寫鎖與普通的互斥鎖的區(qū)別在于有兩種上鎖方式:讀鎖和寫鎖,不用的用戶對(duì)同一個(gè)讀寫鎖獲取讀鎖是非互斥的,其他情況則是互斥的,本文小編將給大家詳細(xì)介紹C++實(shí)現(xiàn)基于時(shí)序公平的讀寫鎖,需要的朋友可以參考下
    2023-10-10
  • C++實(shí)現(xiàn)八皇后問(wèn)題的方法

    C++實(shí)現(xiàn)八皇后問(wèn)題的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)八皇后問(wèn)題的方法,是數(shù)據(jù)結(jié)構(gòu)與算法中常見(jiàn)的一個(gè)經(jīng)典算法,需要的朋友可以參考下
    2014-09-09
  • C/C++ Qt QChart繪圖組件的具體使用

    C/C++ Qt QChart繪圖組件的具體使用

    QtCharts 組件是QT中提供圖表繪制的模塊,用來(lái)繪制常規(guī)圖形,本文就詳細(xì)的介紹了QChart的使用,以及柱狀圖,折線圖等常用的圖形的實(shí)現(xiàn),感興趣的可以了解一下
    2021-11-11
  • C 讀取ini文件的實(shí)例詳解

    C 讀取ini文件的實(shí)例詳解

    這篇文章主要介紹了C 讀取ini文件的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • 基于c++11的event-driven library的理解

    基于c++11的event-driven library的理解

    這篇文章主要介紹了基于c++11的event-driven library的理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++ 如何實(shí)現(xiàn)多線程與線程同步

    C++ 如何實(shí)現(xiàn)多線程與線程同步

    多線程中的線程同步可以使用,CreateThread,CreateMutex 互斥鎖實(shí)現(xiàn)線程同步,通過(guò)臨界區(qū)實(shí)現(xiàn)線程同步,Semaphore 基于信號(hào)實(shí)現(xiàn)線程同步,CreateEvent 事件對(duì)象的同步,以及線程函數(shù)傳遞單一參數(shù)與多個(gè)參數(shù)的實(shí)現(xiàn)方式。
    2021-06-06
  • C語(yǔ)言直接選擇排序算法詳解

    C語(yǔ)言直接選擇排序算法詳解

    直接選擇排序就是遍歷整個(gè)數(shù)組,每遍歷一遍的目的是找出該數(shù)組中的最大數(shù)和最小數(shù)對(duì)應(yīng)的下標(biāo),然后將最小數(shù)和數(shù)組的第一個(gè)數(shù)進(jìn)行交換,最大數(shù)和數(shù)組的最后一個(gè)數(shù)進(jìn)行交換,然后縮小范圍再次遍歷
    2022-08-08

最新評(píng)論