ここに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)を作成し、特定の*問題に関する*具体的な質問をしてください。 –