採集中的數據存儲:
for (int j = 0; j < nHeight; j++)
{
for (int i = 0; i < nWidth; i++)
{
buff[j*nWidth + i] = pOCTData[j * nRealWidth + i];
}
}
需要做的轉換:
for (int i = 0; i < m_wid; ++i)
{
for (int j = 0; j < m_height; ++j)
{
if (isSimulate)
{
num++;
m_tmpImgData[i][j] = num;
}
else
{
m_tmpImgData[i][j] = (int)(pOctdata->_pbyOCTDataBuffer[i * m_height + j]);
}
}
}
for (int i = 0; i < m_height; ++i)
{
for (int j = 0; j < m_wid; ++j)
{
int iPos = j * c;
int k = i * m_wid * c + iPos;
if (c == 3)
{
mImgData[h][k] = (unsigned char)m_tmpImgData[j][m_height - i - 1];
mImgData[h][k + 1] = (unsigned char)m_tmpImgData[j][m_height - i - 1];
mImgData[h][k + 2] = (unsigned char)m_tmpImgData[j][m_height - i - 1];
}
else
{
mImgData[h][k] = (unsigned char)m_tmpImgData[j][m_height - i - 1];
}
}
}
將上面採集轉darknet存儲格式代碼,兩個循環合併成一個循環:
for (int i = 0; i < m_height; ++i)
{
for (int j = 0; j < m_wid; ++j)
{
int iPos = j * c;
int k = i * m_wid * c + iPos;
if (c == 3)
{
mImgData[h][k] = (unsigned char)pOctdata->_pbyOCTDataBuffer[j * m_height + m_height - i - 1];
mImgData[h][k + 1] = (unsigned char)pOctdata->_pbyOCTDataBuffer[j * m_height + m_height - i - 1];
mImgData[h][k + 2] = (unsigned char)pOctdata->_pbyOCTDataBuffer[j * m_height + m_height - i - 1];
}
else
{
mImgData[h][k] = (unsigned char)m_tmpImgData[j][m_height - i - 1];
}
}
}
將上面的代碼GPU加速:
__global__ void MatChannelsOneToThree(unsigned char* dst,unsigned char* src,int w,int h,int c)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
int j = blockIdx.y * blockDim.y + threadIdx.y;
int k = blockIdx.z * blockDim.z + threadIdx.z;
if (i<w&&j<h&&k<c)
{
int iPos = i * c;
int m = j * w * c + iPos;
dst[m+k] = src[i * h + h - j - 1];
}
}