我正在使用OpenCV和MPI来编辑图像(这是一个类)我将图像分成n个片段,每个片段将被发送到核心进行处理,图像将在稍后重新组合。到目前为止,我正试图分解并重新构图,我得到了这个错误
image_descriptor id;
id.process_type = processingType;
id.work_row_start = 0;
id.work_row_stop = localcount[irank] - 1;
id.cols = image.cols;
id.rows = localcount[irank];
imageCells[irank] = id;
y += localcount[irank];
std::vector<byte> img = matToBytes( image(cv::Rect(x, localstart[irank], image.cols, localcount[irank])) );
cv::Mat reconImg = bytesToMat(img, image.cols, localcount[irank]);
cout << reconImg.rows << "x" << reconImg.cols << endl;
std::stringstream ss;
ss << irank;
cv::namedWindow("Original Image" + ss.str(), cv::WINDOW_AUTOSIZE );
cv::imshow("Image" ,reconImg);
cvWaitKey(1000);
然后我看到图像的n个部分中的第一部分和许多黑色方块弹出。
我的主要循环包括
localstart
我的图片720x601 localstop
的位置为0,180,360,540和localcount
加上image(cv::Rect(x, localstart[irank], image.cols, localcount[irank]))
,总是180(在这种情况下)。
如果我只是使用
std::vector<byte> matToBytes(cv::Mat image)
{
int size = image.total() * image.elemSize();
std::vector<byte> img_bytes(size);
std::memcpy(img_bytes.data(),image.data,size * sizeof(byte));
return img_bytes;
}
cv::Mat bytesToMat(vector<byte> bytes,int width,int height)
{
cv::Mat image = cv::Mat(height,width,CV_8UC3,bytes.data()).clone();
return image;
}
我的图像被很好地分成4个偶数部分,只有当我尝试将其转换为字节向量并且返回时才会出现错误。
我的转换方法如下:
int mygetchar(void)
{
static char buf[BUFSIZ];
static char *bufp = buf;
static int i = 0;
if (i == 0)
{
i = read(0, buf, 1);
bufp = buf;
}
if ( --i >= 0 )
{
return *bufp++;
}
return EOF;
}
通过对我的转换方法进行这些更改,我的图像被正确分割和重建,但我仍然会遇到这种奇怪的错误。