国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

(opencv)圖像幾何變換——平移

這篇具有很好參考價(jià)值的文章主要介紹了(opencv)圖像幾何變換——平移。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

圖像的平移操作是將圖像的所有像素坐標(biāo)進(jìn)行水平或垂直方向移動(dòng),也就是將所有像素點(diǎn)按照給定的偏移量在水平方向沿x軸、垂直方向上沿y軸移動(dòng)。平移變換分為兩種類(lèi)型:圖像大小變化與圖像大小不變。第一種類(lèi)型保證圖像平移的完整信息,第二種圖像導(dǎo)致原始圖像的部分信息可能丟失。圖像平移變換公式如下:(不會(huì)用csdn自帶的公式編輯器,使用mathtype打出來(lái)再截圖的)

(opencv)圖像幾何變換——平移

?對(duì)4*4圖像矩陣向右平移x軸一個(gè)單位,向下平移y軸一個(gè)單位,若移動(dòng)后圖像的大小保持不變,多余部分填充為白色時(shí)滿(mǎn)足:

(opencv)圖像幾何變換——平移

對(duì)4*4圖像矩陣向左平移x軸一個(gè)單位,向上平移y軸一個(gè)單位,若移動(dòng)后圖像的大小變換,多余部分填充為白色時(shí)滿(mǎn)足:

(opencv)圖像幾何變換——平移?

舉例說(shuō)明:?

#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace std;
using namespace cv;

//平移操作,圖像大小不變
Mat imgTranslation1(Mat& src, int xOffset, int yOffset)
{
	int nRows = src.rows;
	int nCols = src.cols;
	Mat result (src.size(), src.type());
	//遍歷圖像
	for (int i = 0; i < nRows; ++i)
	{
		for (int j = 0; j < nCols; ++j)
		{
			int x = j - xOffset;
			int y = i - yOffset;
			if (x >= 0 && y >= 0 && x < nCols && y < nRows)
			{
				result.at<Vec3b>(i, j) = src.ptr<Vec3b>(y)[x];
			}
		}
	}
	return result;
}

//平移操作,圖像大小改變
Mat imgTranslation2(Mat& src, int xOffset, int yOffset)
{
	//設(shè)置平移尺寸
	int nRows = src.rows + abs(yOffset);
	int nCols = src.cols + abs(xOffset);
	Mat result(nRows,nCols, src.type());
	//遍歷圖像
	for (int i = 0; i < nRows; ++i)
	{
		for (int j = 0; j < nCols; ++j)
		{
			//映射變換
			int x = j - xOffset;
			int y = i - yOffset;
			if (x >= 0 && y >= 0 && x < nCols && y < nRows)
			{
				result.at<Vec3b>(i, j) = src.ptr<Vec3b>(y)[x];
			}
		}
		
	}
	return result;
}
int main()
{
	Mat src = imread("C:\\Users\\32498\\Pictures\\16.png");
	if (!src.data)
	{
		return -1;
	}
	imshow("src", src);
	int xOffset = 50, yOffset = 80;
	//圖像左平移不改變大小
	Mat dst1 = imgTranslation1(src, xOffset, yOffset);
	imshow("dst1", dst1);
	//圖像左平移改變大小
	Mat dst2 = imgTranslation2(src, xOffset, yOffset);
	imshow("dst2", dst2);
	//圖像右平移不改變大小
	Mat dst3 = imgTranslation1(src, -xOffset, -yOffset);
	imshow("dst3", dst3);
	waitKey();
	return 0;

}

運(yùn)行結(jié)果如下:?

(opencv)圖像幾何變換——平移?

?對(duì)程序中的此行代碼進(jìn)行說(shuō)明

result.at<Vec3b>(i, j) = src.ptr<Vec3b>(y)[x];

result圖像(i,j)處的像素值等于src圖像第y行,第x個(gè)坐標(biāo)的像素值。這其實(shí)是對(duì)圖像進(jìn)行逐像素操作。

?①opencv中的Mat數(shù)據(jù)類(lèi)型指針ptr的使用

    cv::Mat image = cv::Mat(400, 600, CV_8UC1); //寬400,長(zhǎng)600
    uchar * data00 = image.ptr<uchar>(0);
    uchar * data10 = image.ptr<uchar>(1);
    uchar * data01 = image.ptr<uchar>(0)[1];

? ? ? ? 對(duì)上面的注解:(注意看這些的區(qū)別)

定義一個(gè)Mat變量image,

data00是指向image第一行第一個(gè)元素的指針

data10是指向image第二行第一個(gè)元素的指針

data01是指向image第一行第二個(gè)元素的指針?

②Vec3b類(lèi)型的含義

Vec3b可以看作是vector<uchar,3>,即一個(gè)uchar類(lèi)型,長(zhǎng)度為3的vector向量。(不知道vector容器含義的同學(xué)可以這樣理解vector,它就是一個(gè)數(shù)組,只不過(guò)這個(gè)數(shù)組的大小可以隨時(shí)改變,故稱(chēng)vector為動(dòng)態(tài)數(shù)組)

由于在opencv中讀取到的Mat圖像數(shù)據(jù)都是用uchar類(lèi)型的數(shù)據(jù)存儲(chǔ),對(duì)于RGB三通道的圖像,每個(gè)點(diǎn)的數(shù)據(jù)都是一個(gè)vec3b類(lèi)型的數(shù)據(jù)。

使用at定位方法如下:

Mat img=imread("123.png");

//(row,col)為所需要定位點(diǎn)的坐標(biāo)
img.at<Vec3b>(row,col)[0]=255; //修改點(diǎn)(row,col)的B通道數(shù)據(jù)
img.at<Vec3b>(row,col)[1]=255; //修改點(diǎn)(row,col)的G通道數(shù)據(jù)
img.at<Vec3b>(row,col)[2]=255; //修改點(diǎn)(row,col)的R通道數(shù)據(jù)


?同時(shí)還需要注意的是,它返回的是uchar類(lèi)型,直接使用cout輸出為字符格式,需要強(qiáng)制轉(zhuǎn)換為int 類(lèi)型之后輸出:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-478084.html


cout<<(int)img.at<Vec3b>(row,col)[0];

到了這里,關(guān)于(opencv)圖像幾何變換——平移的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【OpenCV】圖像變換(縮放、平移、旋轉(zhuǎn)、仿射)

    圖像變換是指通過(guò)對(duì)圖像進(jìn)行縮放、平移、旋轉(zhuǎn)、仿射、透視等變換來(lái)改變圖像的形狀和大小。在本篇博客中,我們將詳細(xì)介紹OpenCV中的圖像變換函數(shù),并提供示例代碼以幫助讀者更好地理解這些函數(shù)的使用方法。 縮放變換是指通過(guò)改變圖像的大小來(lái)改變圖像的形狀。在Op

    2024年02月07日
    瀏覽(95)
  • OpenCV(圖像處理)-基于Python-圖像的基本變換-平移-翻轉(zhuǎn)-仿射變換-透視變換

    OpenCV(圖像處理)-基于Python-圖像的基本變換-平移-翻轉(zhuǎn)-仿射變換-透視變換

    為了方便開(kāi)發(fā)人員的操作,OpenCV還提供了一些圖像變換的API,本篇文章講簡(jiǎn)單介紹各種API的使用,并附上一些樣例。 圖像縮放函數(shù),用于把圖像按指定的尺寸放大或縮小。 dst = cv2.resize(src, dsize, fx, fy, interpolation) dst = 生成的目的圖像 src:需要變換的原圖像 disize:(x, y)需要

    2024年02月08日
    瀏覽(99)
  • 【OpenCV ? c++】圖像幾何變換 | 圖像仿射變換

    【OpenCV ? c++】圖像幾何變換 | 圖像仿射變換

    ?? 個(gè)人簡(jiǎn)介:CSDN「 博客新星 」TOP 10 , C/C++ 領(lǐng)域新星創(chuàng)作者 ?? 作 ?? 者: 錫蘭_CC ?? ?? 專(zhuān) ?? 欄: 【OpenCV ? c++】計(jì)算機(jī)視覺(jué) ?? 若有幫助,還請(qǐng) 關(guān)注?點(diǎn)贊?收藏 ,不行的話(huà)我再努努力??????

    2024年02月16日
    瀏覽(92)
  • opencv006圖像處理之仿射變換(旋轉(zhuǎn),縮放,平移)

    opencv006圖像處理之仿射變換(旋轉(zhuǎn),縮放,平移)

    空間變換中的仿射變換對(duì)應(yīng)著五種變換,平移,縮放,旋轉(zhuǎn),翻轉(zhuǎn),錯(cuò)切。而這五種變化由原圖像轉(zhuǎn)變到變換圖像的過(guò)程,可以用仿射變換矩陣進(jìn)行描述。而這個(gè)變換過(guò)程可以用一個(gè)2*3的矩陣與原圖進(jìn)行相乘得到。關(guān)鍵就是這個(gè)矩陣M: ?平移,旋轉(zhuǎn)? ?透視 M: 變換矩陣 desi

    2024年01月21日
    瀏覽(95)
  • (opencv)圖像幾何變換——縮放

    (opencv)圖像幾何變換——縮放

    圖像縮放是指將圖像的尺寸變小或變大的過(guò)程,也就是減少或增加源圖像數(shù)據(jù)的像素個(gè)數(shù)。圖像縮放一定程度上會(huì)造成信息的丟失,因此需要考慮適宜的方法進(jìn)行操作。 下面介紹兩種常用的圖像縮放方法的原理及實(shí)現(xiàn) 1.基于等間隔提取圖像縮放 等間隔提取圖像縮放是通過(guò)對(duì)

    2024年02月16日
    瀏覽(29)
  • 【OpenCV ? c++】圖像幾何變換 | 圖像旋轉(zhuǎn)

    【OpenCV ? c++】圖像幾何變換 | 圖像旋轉(zhuǎn)

    ?? 個(gè)人簡(jiǎn)介:CSDN「 博客新星 」TOP 10 , C/C++ 領(lǐng)域新星創(chuàng)作者 ?? 作 ?? 者: 錫蘭_CC ?? ?? 專(zhuān) ?? 欄: 【OpenCV ? c++】計(jì)算機(jī)視覺(jué) ?? 若有幫助,還請(qǐng) 關(guān)注?點(diǎn)贊?收藏 ,不行的話(huà)我再努努力?????? ??圖像的幾何變換是指在不改變圖像像素值的前提下對(duì)圖像像素進(jìn)

    2024年02月16日
    瀏覽(99)
  • 【OpenCV ? c++】圖像幾何變換 | 圖像縮放

    【OpenCV ? c++】圖像幾何變換 | 圖像縮放

    ?? 個(gè)人簡(jiǎn)介:CSDN「 博客新星 」TOP 10 , C/C++ 領(lǐng)域新星創(chuàng)作者 ?? 作 ?? 者: 錫蘭_CC ?? ?? 專(zhuān) ?? 欄: 【OpenCV ? c++】計(jì)算機(jī)視覺(jué) ?? 若有幫助,還請(qǐng) 關(guān)注?點(diǎn)贊?收藏 ,不行的話(huà)我再努努力??????

    2024年02月16日
    瀏覽(25)
  • 【OpenCV ? c++】圖像幾何變換 | 圖像坐標(biāo)映射

    【OpenCV ? c++】圖像幾何變換 | 圖像坐標(biāo)映射

    ?? 個(gè)人簡(jiǎn)介:CSDN「 博客新星 」TOP 10 , C/C++ 領(lǐng)域新星創(chuàng)作者 ?? 作 ?? 者: 錫蘭_CC ?? ?? 專(zhuān) ?? 欄: 【OpenCV ? c++】計(jì)算機(jī)視覺(jué) ?? 若有幫助,還請(qǐng) 關(guān)注?點(diǎn)贊?收藏 ,不行的話(huà)我再努努力?????? ??圖像的幾何變換是指在不改變圖像像素值的前提下對(duì)圖像像素進(jìn)

    2024年02月12日
    瀏覽(33)
  • 【OpenCV入門(mén)】第七部分——圖像的幾何變換

    【OpenCV入門(mén)】第七部分——圖像的幾何變換

    通過(guò)resize()方法可以隨意更改圖像的大小比例: src: 原始圖像 dsize: 輸出圖像的大小,格式為(寬,高),單位為像素 fx: (可選)水平方向的縮放比例 fy: (可選)豎直方向的縮放比例 interpolation: (可選)縮放的插值方式,在圖像縮小或放大時(shí)需要?jiǎng)h減或補(bǔ)充像素,該

    2024年02月10日
    瀏覽(24)
  • Python-OpenCV中的圖像處理-幾何變換

    Python-OpenCV中的圖像處理-幾何變換

    對(duì)圖像進(jìn)行各種幾個(gè)變換,例如移動(dòng),旋轉(zhuǎn),仿射變換等。 cv2.resize() cv2.INTER_AREA v2.INTER_CUBIC v2.INTER_LINEAR res = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC) 或 height, width = img.shape[:2] res = cv2.resize(img, (2 width, 2 height), interpolation=cv2.INTER_CUBIC) OpenCV提供了使用函數(shù)cv2.warpAffine()實(shí)

    2024年02月13日
    瀏覽(97)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包