opencv中的Mat與陣列互轉
直接上程式碼,初步驗證測試正確,陣列形式與opencv的儲存方式一致為BGR。
更多的交流,歡迎加入 暗號271888395cv::Mat TransBufferToMat(unsigned char* pBuffer, int nWidth, int nHeight, int nBandNum, int nBPB = 1) { cv::Mat mDst; if (nBandNum == 4) { if (nBPB == 1) { mDst = cv::Mat::zeros(cv::Size(nWidth, nHeight), CV_8UC4); } else if (nBPB == 2) { mDst = cv::Mat::zeros(cv::Size(nWidth, nHeight), CV_16UC4); } } else if (nBandNum == 3) { if (nBPB == 1) { mDst = cv::Mat::zeros(cv::Size(nWidth, nHeight), CV_8UC3); } else if (nBPB == 2) { mDst = cv::Mat::zeros(cv::Size(nWidth, nHeight), CV_16UC3); } } else if (nBandNum == 1) { if (nBPB == 1) { mDst = cv::Mat::zeros(cv::Size(nWidth, nHeight), CV_8UC1); } else if (nBPB == 2) { mDst = cv::Mat::zeros(cv::Size(nWidth, nHeight), CV_16UC1); } } for (int j = 0; j < nHeight; ++j) { unsigned char* data = mDst.ptr<unsigned char>(j); unsigned char* pSubBuffer = pBuffer + (nHeight - 1 - j) * nWidth * nBandNum * nBPB; memcpy(data, pSubBuffer, nWidth * nBandNum * nBPB); } if (nBandNum == 1) { cv::cvtColor(mDst, mDst, CV_GRAY2BGR); } else if (nBandNum == 3) { cv::cvtColor(mDst, mDst, CV_RGB2BGR); } else if (nBandNum == 4) { cv::cvtColor(mDst, mDst, CV_RGBA2BGR); } return mDst; } int TransMatToBuffer(cv::Mat mSrc, unsigned char** ppBuffer, int& nWidth, int& nHeight, int& nBandNum, int& nBPB) { if (*ppBuffer) { delete[] * ppBuffer; *ppBuffer = nullptr; } nWidth = mSrc.cols; //nWidth = ((nWidth + 3) / 4) * 4; nHeight = mSrc.rows; nBandNum = mSrc.channels(); nBPB = (mSrc.depth() >> 1) + 1; size_t nMemSize = nWidth * nHeight * nBandNum * nBPB; //這樣可以改變外部*pBuffer的值 *ppBuffer = new uchar[nMemSize]; memset(*ppBuffer, 0, nMemSize); uchar* pT = *ppBuffer; for (int j = 0; j < nHeight; ++j) { unsigned char* data = mSrc.ptr<unsigned char>(j); unsigned char* pSubBuffer = *ppBuffer + (j)* nWidth * nBandNum * nBPB; memcpy(pSubBuffer, data, nWidth * nBandNum * nBPB); } return 0; }
相關推薦
opencv中的Mat與陣列互轉
直接上程式碼,初步驗證測試正確,陣列形式與opencv的儲存方式一致為BGR。cv::Mat TransBufferToMat(unsigned char* pBuffer, int nWidth, int nHeight, int nBandNum, int nBPB =
opencv中Mat與陣列之間值傳遞的方法
1.將陣列內容傳遞給Mat 示例程式碼: unsigned char cbuf[height][width]; cv::Mat img(height, width, CV_8UC1, (unsigned char*)cbuf); 1 2 2.將Mat中的內容傳遞給
樹莓派3B在QT環境下使用opencv呼叫自帶攝像頭使用拍照,記憶體中bmp與jpg互轉
樓主最近在做一個人臉識別的專案,剛好有個一個樹莓派3B,於是準備拿來做終端使用,使用命令列和python拍照都很簡單,但是速度感人,就想使用opencv拍照,結果網上很多方法都有問題,只能使用USB的攝像頭,最終用了gayhub上的一個開源專案raspicam成功呼叫了ope
dlib中的image和opencv中的image格式互轉
//dlib::array2d is an image already, you can use it for any dlib's image functions //load image: dlib::array2d<dlib::rgb_pixe
python中str與list互轉
1、list轉str 假設有一個名為test_list的list,轉換後的str名為test_str 則轉換方法: test_str = "".join(test_list) 需要注意的是該方法需要list中的元素為字元型,若是整型,則需要先轉換為字元型後再轉為str型別。
OpenCV中Mat與Android中Bitmap簡介
因為在介紹這部分系列的內容時,預設是對Android開發有一點基礎的,所以這樣的話,Bitmap可能就相對很熟悉了,相較陌生的是Mat,那我們就首先來看看Mat是什麼。 1,Mat 1.1 Mat基本介紹 Mat是OpenCV中用於
Python中rgb與ycbcr互轉
mat = np.array( [[ 65.481, 128.553, 24.966 ], [-37.797, -74.203, 112.0 ], [ 112.0, -9
Mat與QImage互轉
1、MatConvertQImage.hpp #ifndef MATQIMAGE_HPP #define MATQIMAGE_HPP #include <QImage> #include <opencv2/core/core.hpp> #include <openc
Halcon 字串與HTuple互轉,double與HTuple互轉,Mat與HObject互轉
Opencv和Halcon直接有很多資料要轉換,特此記錄1 字串與HTuple互轉char *pImageName = "D:/data/temp.png"; HTuple hv_path; hv_path = (HTuple)(pImageName); cout <&
MFC中UTF8與GB2312互轉
UTF8轉GB2312 CString CMyBrowserDlg::ConvertUTF8toGB2312(CString str) { int len = str.GetLength
C# 中物件與Json互轉的方法整理筆記
前言 原先一直做CS的開發,對Json瞭解不多,最近轉做BS後,才接觸到了Json。作為後臺與前端頁面資料互動的基礎,Json的地位非常重要,自然而然Json轉換方法的重要性也不言面喻。 最開始使用的是同事原來寫好的物件轉Json的方法,並沒有什麼問題,
Java 10進位制byte陣列與16進位制byte陣列互轉 及 在DES加解密中的使用
一、10進位制byte陣列與16進位制byte陣列互轉 1. 10進位制byte陣列轉成16進位制byte陣列 Java中10進位制byte用二進位制表示佔用8位,16進位制的每個字元需要用4位二進位制位來表示,則將每一個10進位制 位元組的高4位、低4位分別進行處理,對應
Opencv中Mat結構體中元素的獲取與賦值
【OpenCV3影象處理】Mat中元素的獲取與賦值 ( 對比.at<>()函式 和 .ptr<>()函式) 2017年04月12日 10:08:55 閱讀數:7542 標籤: opencvopencv3 更多 個人分類:&nbs
C#與unity中base64string和圖片互轉
C#: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using
sql server 和 oracle 中,ip與數字互轉
(一)Oracle中: (1) IP轉為數字: createorreplacefunction ip2number(ip varchar2) return number is
C++ 動態分配陣列空間,以及opencv中Mat類的初始化
在C++中,如果想要申請動態陣列,必須要用動態分配的方式。 int **matrix=new int*[num_of_rows]; for(int i=0;i<num_of_rows;i++){ int *row=new int[num_of
使用OpenCv中Mat進行水平投影與垂直投影並實現字元切分
因為要做影象處理方面的工作,所以最近在學習OpenCv的使用,學習了OpenCv中Mat物件的相關使用之後,實現了使用Mat物件來進行影象的水平投影和垂直投影,並且在投影之後,對字元進行相對應的切分。現在將相關程式碼貼出,一來可以供大家參考並指正錯誤,而來也為的是防止忘記了
java中的二進位制int與byte互轉以及&0xff的作用
1. 按位與& :兩位全位1,結果才為1; 0&0=0; 0&1=0 ; 1&1=1 如:51 &5 =0011 0011 & 0000 0101=0000 0001 = 1 作用:清零、取一個數中指定位(即
Java中net.sf.json包關於JSON與物件互轉的坑
在Web開發過程中離不開資料的互動,這就需要規定互動資料的相關格式,以便資料在客戶端與伺服器之間進行傳遞。資料的格式通常有2種:1、xml;2、JSON。通常來說都是使用JSON來傳遞資料。本文正是介紹在Java中JSON與物件之間互相轉換時遇到的幾個問題以及相
Java中List和String【】陣列互轉
將List轉成陣列 1.List轉陣列 /** * List to Array * @param list * @return