91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenCV中如何對圖像數據進行64F和8U轉換

發布時間:2020-07-18 16:54:36 來源:億速云 閱讀:365 作者:小豬 欄目:開發技術

這篇文章主要講解了OpenCV中如何對圖像數據進行64F和8U轉換,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

在OpenCV中很多對數據的運算都需要轉換為64F類型,比如伽瑪變換,這個很明顯要求冪的底數是double類型~

而cvShowImage()又要求是U8才能顯示,否則顯示出來是一片空白!

所以經常要進行轉換,怎么做呢?看了下面的幾行代碼你就知道了!

IplImage *pSrcImage = cvLoadImage("pout.jpg", CV_LOAD_IMAGE_UNCHANGED); 
IplImage *pGrayImage_8U = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1); 
IplImage *pGrayImage_8U_2 = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1); 

IplImage *pGrayImage_64F=cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_64F, 1);

cvCvtColor(pSrcImage, pGrayImage_8U, CV_BGR2GRAY); //RGB轉灰度圖像

cvConvertScale(pGrayImage_8U, pGrayImage_64F); //8U轉64F
cvConvertScale(pGrayImage_64F, pGrayImage_8U_2) //64F轉8U

補充知識:OpenCV中利用cvConvertScale()對圖像數據作線性變換~

在OpenCV的IplImage結構體char * imageData成員的說明中,官方文檔明確提示大家不能對這個指針所對應的數據直接操作,否則會帶來意想不到的錯誤。

原話是這樣的:

Do not assign imageData directly. Use SetData().

我曾經就犯傻直接進行操作,結果造成數據類型不匹配,最后還非得去修改頭文件中的char * imageData為unsigned char * imageData才解決問題,然而這種操作是極其不妥的~正確的做法是用OpenCV提供的各種函數來對圖像數據就行操作!比如cvConvertScale()、Use SetData()之類的!

這里我用cvConvertScale()來實現灰度圖像的線性變換,程序非常簡潔,而且沒有任何問題!

源代碼如下:

#include <opencv2/opencv.hpp> 
#include <opencv2/legacy/compat.hpp> 
using namespace std; 
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") 

int main()
{
int i=0;
unsigned char *imageData_1;
unsigned char *imageData_2;
const char *pstrWindowsATitle = "原圖像(opencv66.net)"; 
const char *pstrWindowsBTitle = "線性變換后的圖像(opencv66.net))"; 
//從文件中加載原圖 
IplImage *pSrcImage = cvLoadImage("coins.png", CV_LOAD_IMAGE_UNCHANGED); 
//創建輸出的圖像
IplImage *pOutImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U,1);
cvConvertScale(pSrcImage,pOutImage,2,-55); //利用cvConvertScale增加對比度的線性變換,線性變換中的比例因子k=2 偏移值b=-55
cvNamedWindow(pstrWindowsATitle, CV_WINDOW_AUTOSIZE); 
cvShowImage(pstrWindowsATitle,pSrcImage); 
cvNamedWindow(pstrWindowsBTitle, CV_WINDOW_AUTOSIZE); 
cvShowImage(pstrWindowsBTitle, pOutImage); 
cvWaitKey(0); 
cvDestroyWindow(pstrWindowsATitle); 
cvDestroyWindow(pstrWindowsBTitle); 
cvReleaseImage(&pSrcImage); 
cvReleaseImage(&pOutImage); 
return 0;
}

運行結果如下圖所示(和我在MATLAB中的運行結果一致哦)

OpenCV中如何對圖像數據進行64F和8U轉換

MATLAB運行后的結果

OpenCV中如何對圖像數據進行64F和8U轉換

看完上述內容,是不是對OpenCV中如何對圖像數據進行64F和8U轉換有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通海县| 开鲁县| 海兴县| 崇信县| 富民县| 大方县| 兴文县| 监利县| 灵川县| 佳木斯市| 盐池县| 云南省| 抚松县| 洱源县| 鄂托克前旗| 团风县| 丹寨县| 施甸县| 巴青县| 曲水县| 黔江区| 龙山县| 临桂县| 柳江县| 麻城市| 巴中市| 军事| 南丰县| 敦化市| 酒泉市| 溆浦县| 岳阳市| 抚松县| 贵阳市| 连江县| 河间市| 耒阳市| 平泉县| 瑞昌市| 洛扎县| 海安县|