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

04- OpenCV:Mat對(duì)象簡(jiǎn)介和使用

這篇具有很好參考價(jià)值的文章主要介紹了04- OpenCV:Mat對(duì)象簡(jiǎn)介和使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1、Mat對(duì)象與IplImage對(duì)象

2、Mat對(duì)象使用

3、Mat定義數(shù)組

4、相關(guān)的代碼演示


1、Mat對(duì)象與IplImage對(duì)象

先看看Mat對(duì)象:圖片在計(jì)算機(jī)眼里都是一個(gè)二維數(shù)組;

在OpenCV中,Mat是一個(gè)非常重要的類,用于表示圖像或矩陣數(shù)據(jù)。

04- OpenCV:Mat對(duì)象簡(jiǎn)介和使用,OpenCV,opencv,人工智能,計(jì)算機(jī)視覺,Mat對(duì)象的講解

(1)Mat對(duì)象OpenCV2.0之后引進(jìn)的圖像數(shù)據(jù)結(jié)構(gòu)、自動(dòng)分配內(nèi)存、不存在內(nèi)存泄漏的問題,是面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)。分了兩個(gè)部分,頭部與數(shù)據(jù)部分

(2)IplImage是從2001年OpenCV發(fā)布之后就一直存在,是C語言風(fēng)格的數(shù)據(jù)結(jié)構(gòu),需要開發(fā)者自己分配與管理內(nèi)存,對(duì)大的程序使用它容易導(dǎo)致內(nèi)存泄漏問題

(3)Mat對(duì)象構(gòu)造函數(shù)與常用方法

  1. 構(gòu)造函數(shù):

    • Mat(): 默認(rèn)構(gòu)造函數(shù),創(chuàng)建一個(gè)空的Mat對(duì)象。
    • Mat(int rows, int cols, int type): 創(chuàng)建指定行數(shù)、列數(shù)和類型的Mat對(duì)象。
    • Mat(Size size, int type): 創(chuàng)建指定尺寸和類型的Mat對(duì)象。
    • Mat(int rows, int cols, int type, Scalar scalar): 創(chuàng)建指定行數(shù)、列數(shù)、類型和初始值的Mat對(duì)象。
  2. 常用方法:

    • rows(): 返回Mat對(duì)象的行數(shù)。
    • cols(): 返回Mat對(duì)象的列數(shù)。
    • size(): 返回Mat對(duì)象的尺寸(行數(shù)和列數(shù))。
    • type(): 返回Mat對(duì)象的數(shù)據(jù)類型。
    • empty(): 檢查Mat對(duì)象是否為空。
    • at<T>(int row, int col): 返回指定位置的元素值,其中T是元素的數(shù)據(jù)類型。
    • ptr<T>(int row): 返回指定行的指針,其中T是元素的數(shù)據(jù)類型。
    • clone(): 復(fù)制Mat對(duì)象并返回副本。
    • convertTo(Mat& dst, int type, double alpha=1, double beta=0): 將Mat對(duì)象轉(zhuǎn)換為指定類型,并可選地進(jìn)行縮放和偏移。
    • reshape(int cn, int rows=0): 改變Mat對(duì)象的通道數(shù)和行數(shù)。
    • int channels(): 返回Mat對(duì)象的通道
    • int depth(): 返回Mat對(duì)象深度
2、Mat對(duì)象使用

(1)復(fù)制

? ? ? ? 1)部分復(fù)制:一般情況下只會(huì)復(fù)制Mat對(duì)象的頭和指針

????????部分,不會(huì)復(fù)制數(shù)據(jù)部分

Mat A= imread(imgFilePath);

Mat B(A) ?// 只復(fù)制

? ? ? ? 2)完全復(fù)制:如果想把Mat對(duì)象的頭部和數(shù)據(jù)部分一起

復(fù)制,可以通過如下兩個(gè)API實(shí)現(xiàn)

Mat F = A.clone();

或 Mat G; A.copyTo(G);

(2)Mat對(duì)象使用-四個(gè)要點(diǎn)

? ? ? ? 1)輸出圖像的內(nèi)存是自動(dòng)分配的

? ? ? ? 2)使用OpenCV的C++接口,不需要考慮內(nèi)存分配問題

? ? ? ? 3)賦值操作和拷貝構(gòu)造函數(shù)只會(huì)復(fù)制頭部分

? ? ? ? 4)使用clone與copyTo兩個(gè)函數(shù)實(shí)現(xiàn)數(shù)據(jù)完全復(fù)制

(3)Mat對(duì)象創(chuàng)建

? ? ? ? 1)cv::Mat::Mat構(gòu)造函數(shù) ?? ?

04- OpenCV:Mat對(duì)象簡(jiǎn)介和使用,OpenCV,opencv,人工智能,計(jì)算機(jī)視覺,Mat對(duì)象的講解

Mat M(2,2,CV_8UC3, Scalar(0,0,255))

????????其中前兩個(gè)參數(shù)分別表示行(row)跟列(column)、第三個(gè)CV_8UC3中的8表示每個(gè)通道占8位、U表示無符號(hào)、C表示Char類型、3表示通道數(shù)目是3,第四個(gè)參數(shù)是向量表示初始化每個(gè)像素值是多少,向量長(zhǎng)度對(duì)應(yīng)通道數(shù)目一致

? ? ? ? 2)創(chuàng)建多維數(shù)組cv::Mat::create ?? ?

int sz[3] = {2,2,2}; ? ? ?? ?
Mat ?L(3,sz, CV_8UC1, Scalar::all(0));

? ? ? ? 3)cv::Mat::create實(shí)現(xiàn)

Mat M;
M.create(4, 3, CV_8UC2);
M = Scalar(127,127);
cout << "M = " << endl << " " << M << endl << endl;
uchar* firstRow = M.ptr<uchar>(0);
printf("%d", *firstRow);

04- OpenCV:Mat對(duì)象簡(jiǎn)介和使用,OpenCV,opencv,人工智能,計(jì)算機(jī)視覺,Mat對(duì)象的講解

3、Mat定義數(shù)組

(1)定義小數(shù)組文章來源地址http://www.zghlxwxcb.cn/news/detail-809335.html

Mat C = (Mat_<double>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);     
cout << "C = " << endl << " " << C << endl << endl;
4、相關(guān)的代碼演示
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv) {
	Mat src;
	src = imread("D:/vcprojects/images/test.png");
	if (src.empty()) {
		cout << "could not load image..." << endl;
		return -1;
	}
	namedWindow("input", CV_WINDOW_AUTOSIZE);
	imshow("input", src);

	/*Mat dst;
	dst = Mat(src.size(), src.type());
	dst = Scalar(127, 0, 255);
	namedWindow("output", CV_WINDOW_AUTOSIZE);
	imshow("output", dst);*/
	Mat dst;
	//src.copyTo(dst);
	namedWindow("output", CV_WINDOW_AUTOSIZE);

	cvtColor(src, dst, CV_BGR2GRAY);
	printf("input image channels : %d\n", src.channels());
	printf("output image channels : %d\n", dst.channels());

	int cols = dst.cols;
	int rows = dst.rows;

	printf("rows : %d cols : %d\n", rows, cols);
	const uchar* firstRow = dst.ptr<uchar>(0);
	printf("fist pixel value : %d\n", *firstRow);

	Mat M(100, 100, CV_8UC1, Scalar(127));
	//cout << "M =" << endl << M << endl;

	Mat m1;
	m1.create(src.size(), src.type());
	m1 = Scalar(0, 0, 255);

	Mat csrc;
	Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
	filter2D(src, csrc, -1, kernel);

	Mat m2 = Mat::eye(2, 2, CV_8UC1);
	cout << "m2 =" << endl << m2 << endl;

	imshow("output", m2);
	waitKey(0);
	return 0;
}

到了這里,關(guān)于04- OpenCV:Mat對(duì)象簡(jiǎn)介和使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(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)文章

  • opencv03-Mat矩陣API的使用

    構(gòu)造方法(具體介紹看API文檔) 成員方法 成員方法 create

    2024年02月14日
    瀏覽(19)
  • 人工智能算法工程師面試題——之OpenCV必背匯總(四)

    在OpenCV中,圖像融合通常指的是將兩個(gè)或更多圖像以某種方式組合在一起,以創(chuàng)建一個(gè)新的圖像。這個(gè)過程可以用于多種目的,比如藝術(shù)效果、圖像修復(fù)或信息增強(qiáng)。實(shí)現(xiàn)圖像融合的一種常見方法是通過加權(quán)求和,也就是每個(gè)像素位置上將不同圖像的像素值按照一定的權(quán)重相

    2024年02月21日
    瀏覽(20)
  • [C++] opencv - Mat::convertTo函數(shù)介紹和使用場(chǎng)景

    [C++] opencv - Mat::convertTo函數(shù)介紹和使用場(chǎng)景

    Converts an array to another data type with optional scaling.? ? 該函數(shù)主要用于數(shù)據(jù)類型的相互轉(zhuǎn)換。 The method converts source pixel values to the target data type. saturate_cast is applied at the end to avoid possible overflows: m(x,y)=saturate_castrtype(α(?this)(x,y)+β)? ? 這是函數(shù)底層算法實(shí)現(xiàn)公式,了解算法方便我們

    2024年01月18日
    瀏覽(22)
  • C# - Opencv應(yīng)用(2) 之矩陣Mat使用[矩陣創(chuàng)建、圖像顯示、像素讀取與賦值]

    C# - Opencv應(yīng)用(2) 之矩陣Mat使用[矩陣創(chuàng)建、圖像顯示、像素讀取與賦值]

    C# - Opencv應(yīng)用(2) 之矩陣Mat使用[矩陣創(chuàng)建、圖像顯示、像素讀取與賦值] 矩陣創(chuàng)建 圖像顯示與保存 像素讀取與賦值 新建sample02項(xiàng)目,配置opencv4相關(guān)包,新建 .cs 進(jìn)行測(cè)試 兩種常用的圖像遍歷方式 灰度圖操作 三通道圖操作 完整代碼

    2024年02月03日
    瀏覽(24)
  • 【c++ Opencv】Opencv中Mat的一些相關(guān)操作

    C++中的Mat類是OpenCV庫(kù)中最核心的數(shù)據(jù)結(jié)構(gòu)之一,用于表示圖像和矩陣等二維、三維數(shù)據(jù)。Mat類的主要特點(diǎn)是可輕松地訪問像素點(diǎn),支持各種矩陣運(yùn)算,可以實(shí)現(xiàn)各種圖像處理算法。下面是一些常見的Mat操作: 1. 創(chuàng)建Mat對(duì)象:可以通過構(gòu)造函數(shù)、靜態(tài)方法或賦值操作符來創(chuàng)建

    2024年02月13日
    瀏覽(15)
  • OpenCV Mat類

    OpenCV Mat類

    設(shè)為A,B為Mat類型,s是Scalar類型,a是一個(gè)實(shí)數(shù)。下面列出關(guān)于Mat的常用運(yùn)算: OpenCV是一個(gè)廣泛使用的計(jì)算機(jī)視覺庫(kù),它提供了許多用于圖像處理和計(jì)算機(jī)視覺任務(wù)的函數(shù)和工具。在OpenCV中,Mat是一個(gè)重要的數(shù)據(jù)結(jié)構(gòu),用于表示圖像和矩陣。Mat類提供了一種方便的方式來處理

    2024年02月09日
    瀏覽(15)
  • opencv Mat詳解

    opencv Mat詳解

    我們有多種方法從現(xiàn)實(shí)世界獲取數(shù)字圖像:數(shù)碼相機(jī)、掃描儀、計(jì)算機(jī)斷層掃描和磁共振成像等。在任何情況下,人類看到的都是圖像。當(dāng)將其轉(zhuǎn)換為數(shù)字圖像在設(shè)備中進(jìn)行存儲(chǔ)時(shí),我們記錄的是圖像中每個(gè)點(diǎn)的數(shù)值。 例如,在上面的圖像中,可以看到汽車的鏡子只是一個(gè)包

    2024年02月07日
    瀏覽(21)
  • OpenCV(Mat類)

    OpenCV(Mat類)

    目錄 1、什么是Mat類 2、Mat類組成 ?3、Mat類能存儲(chǔ)的數(shù)據(jù)類型 ?4.Mat類的創(chuàng)建 4.1 利用矩陣寬、高和類型參數(shù)創(chuàng)建 ?4.2 利用矩陣Size()結(jié)構(gòu)和數(shù)據(jù)類型參數(shù)來創(chuàng)建 4.3 利用已有Mat類來創(chuàng)建 ?5、Mat類的賦值 5.1 創(chuàng)建時(shí)賦值 5.2 類方法賦值 5.3 枚舉賦值 ?6、Mat類數(shù)據(jù)的讀取 6.1 Mat類的常

    2024年02月12日
    瀏覽(16)
  • <OpenCV> Mat屬性

    <OpenCV> Mat屬性

    OpenCV的圖像數(shù)據(jù)類型可參考之前的博客:https://blog.csdn.net/thisiszdy/article/details/120238017 OpenCV-Mat類型的部分屬性如下: size:矩陣的大小, s i z e ( c o l s , r o w s ) size(cols,rows) s i ze ( co l s , ro w s ) ; elemSize():矩陣一個(gè)元素占用的字節(jié)數(shù)( 通道數(shù) ? 位數(shù) / 8 通道數(shù)*位數(shù)/8 通道數(shù)

    2024年02月09日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包