這裏是Matlab中的代碼和我使用Matlab獲得的結果圖片。出於某些目的,我需要將Matlab代碼轉換爲C++。我已經完成了C++數據結構的轉換,然後我需要處理顯示圖片的部分。我決定使用OpenCV庫來替換Matlab中的圖像處理。我發現OpenCV中的convertTo
,applyColorMap
和imshow
等函數可以替代Matlab中的函數imagesc
。所以,我在網上模擬了我搜索的代碼。但它不起作用。如何使用convertTo,applyColorMap,imshow來複制matlab輸出的功能?
這是我在C++代碼:
for (cutNumber = 1; cutNumber <= 9; cutNumber++)
{
momentString = "dBT";
DataSelect* BaseData_Select = select(theObj,cutNumber,momentString);
int ncols = BaseData_Select->allLength/BaseData_Select->dataLength;
// 對應matlab auto.m第138行。下面是繪製dBZ的B顯圖
Mat mydata(BaseData_Select->dataLength, ncols, CV_32F);
for (int i = 0; i < BaseData_Select->dataLength; i++)
{
for (int j = 0; j < ncols; j++)
{
int temmmp = i*ncols+ j;
mydata.at<float>(i, j) = BaseData_Select->data[i*ncols + j];
}
}
double Amin = *min_element(mydata.begin<float>(), mydata.end<float>()); // Amin is -19
double Amax = *max_element(mydata.begin<float>(), mydata.end<float>()); // Amax is 64
cv::minMaxIdx(mydata, &Amin, &Amax);
cv::Mat adjMap;
float scale = 255/(Amax - Amin);
mydata.convertTo(adjMap, CV_8UC1, scale, -Amin*scale);
cv::Mat resultMap;
applyColorMap(adjMap, resultMap, cv::COLORMAP_AUTUMN);
cv::imshow("Out", resultMap);
cv::imwrite("output.bmp", resultMap);
}
這裏是處理在Matlab圖像的代碼。
figure(H_figure_PHIDP);
subplot(3,3,Cut_Number);
imagesc(PHIDP.Data);
colormap('default');
caxis([ -20 60]);
ylim([Sphere_Distance_Cell-Sphere_Distance_Cell_Extend Sphere_Distance_Cell+Sphere_Distance_Cell_Extend])
xlim([Sphere_Center_Ray-Sphere_Azimuth_Cell_Extend Sphere_Center_Ray+Sphere_Azimuth_Cell_Extend])
xlabel('徑向數目');
ylabel('距離庫');
在Matlab上運行的結果畫面是我想要使用OpenCV函數。
而用C我的結果畫面++是下面的圖片是錯誤的畫面絕對。
可以在任何一個可以幫助我解決這個問題?
你的問題是相當不確定的。請學會創建一個[MCVE](http://stackoverflow.com/help/mcve),並詢問*特定的*有關特定*問題的問題。 –