1. 程式人生 > >opencv影象讀取和cv::Mat

opencv影象讀取和cv::Mat

1、在opencv的C++ API中,所有的類和函式都在名稱空間cv內定義,可以使用

using namespace cv;

或者是加上字首 cv::

2、imread讀入影象
生成的影象由無符號(unsigned char)構成(OpenCV中為CV_8U)

image=cv::imread("puppy.bmp",CV_LOAD_IAMGE_COLOR);  //讀取一個影象檔案,並轉換為三通道彩色影象,每個畫素有3個位元組(CV_8U3C

使用image.channels()可以獲得影象的通道數;
當用imread開啟路徑制定不完整的影象時,imread會自動開啟預設目錄。如果從控制檯執行程式,預設目錄就是可執行檔案所在的目錄,如果從IDE中執行程式,為專案檔案所在的目錄。

3、imshow顯示影象
imshow顯示的影象是由整數(CV_16U表示16為無符號整數,CV_32S表示32為有符號整數)構成,影象每個畫素的值會被除以256,以便能夠在256級灰度中顯示。在顯示由浮點數構成的影象時,值的範圍會被假設為0.0(黑色)到1.0(白色)之間,大於1.0顯示白色,小於0.0顯示黑色。

4、cv::Mat
(1)cv::Mat 由一個頭部和一個數據塊組成,頭部包含了矩陣的相關資訊(大小,通道數,資料型別等),資料塊包含了影象中所有畫素的值。頭部有一個指向資料塊的指標,即data屬性。

cv::Mat(240,320,CV_8U,100);  //建立一個240x320的影象,每個畫素對應一個位元組

(2)cv::Scalar,用於在呼叫函式時傳遞畫素值。

cv::Mat image(240,320,CV_8UC3,cv::Scalar(100));  //建立一個紅色影象,通道順序為BGR

(3)cv::Size,包含了矩陣的高度和寬度

cv::Mat image(cv::Size(320,240),CV_8UC3);//建立一個未初始化的彩色影象。

可以使用create方法分配或重新分配影象的資料塊,如果影象已經分配,其原來的內容會被釋放。

iamge.create200,200,CV_8U);

(4)cv::Mat 的at(x,y)可以訪問元素,在編譯時必須明確方法返回值的的型別。
如:

image.at<uchar>(j,i)=255;

彩色影象的每個畫素對應三個部分:紅色,綠色,藍色。包含彩色影象的cv::Mat返回一個向量,向量中包含三個8為的數值,訪問彩色影象的方法:

image.at<cv::Vec3b>(j,i)[channel]=value;

(5)cv::Mat 的ptr方法可以直接訪問影象中一個行的地址。
如:

 uchar* data=image.ptr<uchar>(j);

(6)cv::Mat的isContinuous方法可以判斷出影象有沒有被填充,如果影象沒有被填充,它就返回true.
如:

if(image.isContinuous())
{
   //沒有填充畫素
   image.reshape(1,1);//設定新的通道數為1,新的行數為1
}

相關推薦

opencv影象讀取cv::Mat

1、在opencv的C++ API中,所有的類和函式都在名稱空間cv內定義,可以使用 using namespace cv; 或者是加上字首 cv:: 2、imread讀入影象 生成的影象由無符號(unsigned char)構成(OpenCV中為C

opencv 影象讀取顯示畫素操作

從今天起,開始從頭系統學習下opencv,下面記錄下影象的基本操作: 1. 影象的讀取和顯示 Mat image = imread(imagePath, 1); 第二個引數表示圖片讀入的方式(

mwArraycv::Mat轉化函數 20170812

row 是否 mat return i+1 emp brush assert split 不是新東西了,但是有必要專門把這兩個函數拿出來記錄一下。 需要註意的是,Mat2mwArry函數的輸入Mat類型是 CV_8UC1,灰度圖。 如果要傳遞多通道圖像的話,需要先cv:

第四天 opencv 影象變換空間影象濾波

####################這段是轉載,解釋影象變換和空間濾波區別即cv.medianBlur和cv.filter2D####### 在空間域的操作主要可以分為兩類:第一類是所謂的“影象強度變換”(Intensity Transform),另一類是所謂的“空間域影象濾波”(Spati

QT入門 QImagecv::Mat的相互轉換(八)

QImage轉換為cv::Mat的方法 cv::Mat QImage2cvMat(QImage image) { cv::Mat mat; qDebug() << image.format(); switch(image.format())

opencv--影象色彩對比度

處理影象經常會對影象色彩進行增強,這就是改變影象的亮度和對比度。本章基於opencv對影象的亮度和對比度進行處理操作。其實,這是對影象的每一個畫素點進行相應的操作。 在這個公式中 alpha 第一個引數α必須是大於零,不然則基本上沒有意義了。 α能使影象畫素成倍數的增長或降低(

Opencv---影象對比度亮度調節

調整影象亮度和對比度操作屬於畫素變換---點操作 數學原理:        g(x,y) = af(x,y)+b; a>0,b為增益變數 程式碼實現: #include <opencv2/opencv.hpp> #include <iost

第四天 opencv 影象變換空間影象濾波

####################這段是轉載,解釋影象變換和空間濾波區別即cv.medianBlur和cv.filter2D####### 在空間域的操作主要可以分為兩類:第一類是所謂的“影象強度變換”(Intensity Transform),另一類是所謂的“空間域

OpenCV影象拼接影象融合技術

影象拼接在實際的應用場景很廣,比如無人機航拍,遙感影象等等,影象拼接是進一步做影象理解基礎步驟,拼接效果的好壞直接影響接下來的工作,所以一個好的影象拼接演算法非常重要。 再舉一個身邊的例子吧,你用你的手機對某一場景拍照,但是你沒有辦法一次將所有你要拍的景物全部拍下來,

python影象讀取儲存方案總結

以下程式中用到的timg.jpg原圖為 1、scipy Scipy是一個高階的科學計算庫,其中misc模組很好用,可以將陣列儲存為圖片,也可以對numpy形式影象陣列靈活處理,比如裁剪圖片某一部分等。 from scipy import misc def main(): im

OpenCV遍歷輸出Mat矩陣中資料方法總結

一、Mat中影象畫素的訪問方式 1.ptr操作和指標-高效的方式 這種方式基於.ptr的操作,也是比較推薦的遍歷影象的方式。 1 2 3 4

CvMat cv::Mat之間的區別

cv::Mat是一個類(Class),而CvMat是一個Struct,從型別上就可以知道二者存在很大區別。前者除了幾個成員變數之外還有很多的成員函式和過載函式,可以實現很多的影象資料處理功能,而後者只有幾個成員變數,要對其成員進行一些處理,需要借用別的函式。

Opencv影象對比度亮度的調整-滾動條

#include<iostream> #include<opencv2/opencv.hpp> #include"stdio.h" using namespace std; using namespace cv; Mat srcImage, re

python的兩種影象讀取處理方法

 1 skimage庫      from skimage import data_dir,io, data   img = data.camera()   #讀取data中預先儲存的影象camera                         #Anaconda 版本參

[OpenCV開發]OpenCV影象編碼解碼 imencodeimdecode使用,用於網路傳輸圖片

在很多應用中,經常會直接把圖片的二進位制資料進行交換,比如說利用 socket 通訊傳送圖片二進位制資料,或者直接用記憶體資料庫(例如 Redis)來傳遞圖片二進位制資料。 這個時候,當你的應用程式讀到記憶體裡的二進位制圖片資料時,怎麼樣直接轉為 OpenCV 可以使用

Android OpenCV影象識別影象追蹤

首先介紹一下OpenCV中影象識別和跟蹤機制:        影象跟蹤機制是確定矩目標在3D環境中的姿態,並根據此類資訊環繞目標物件繪製輪廓線。在最終的2D影象中,考慮到目標可能相對於相機傾斜,因而輪廓線將呈現為四邊形(不一定是矩形)。        上述跟蹤機制主要包含以

ImageMagick 的 Image OpenCVcv::Mat 如何轉換

參考自: http://blog.csdn.net/revolver/article/details/12851395 僅以 BGR 格式為例: 一、cv::Mat -> Image Image Mat2Magick(const cv::Mat& img )

macOS python3 opencv 讀取寫入影象

python opencv 影象 讀取 寫入 1,讀取和寫入影象 1,讀取和寫入影象 #! /usr/local/bin/python3 # coding:utf-8 import cv2 #讀取影象 img = cv2.imread("/U

OpenCV影象處理類,MatIpllmage類

 Mat類是OpenCV 中最核心的類,全稱是Matrix,意為矩陣或者陣列的意思,該類的宣告在標頭檔案opencv2\core\core.hpp中,   Mat 類的建構函式如下:  Mat(int rows,int cols,int type)  其中rows代表矩

C#呼叫 opencv cv::Mat 影象, 採用折中方法

C# 用於介面的製作要比MFC高效許多,但是有時候為了效率需要用C++程式,這樣就涉及到了把C++核心演算法程式做成dll,在C#中進行呼叫。 之前有將IplImage*  這類結構用於C#呼叫,