Почему я не могу правильно создать фронтальные и сагиттальные срезы из вектора из 256 КТ-изображений с помощью кода C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему я не могу правильно создать фронтальные и сагиттальные срезы из вектора из 256 КТ-изображений с помощью кода C++?

Сообщение Anonymous »

Загружаю 256 КТ-изображений размером 512*512 срезов поперечного сечения и помещаю их в вектор (256), затем хочу получить корональный и сагиттальный срезы

Код: Выделить всё

// Get coronal section slice
std::vector get_coronal() {
std::vector coronal_section(slice_height, cv::Mat(slice_num, slice_width, CV_16UC1, cv::Scalar(0)));
for (int i = 0; i < slice_height; i++)
{
for (int k = 0; k < slice_num; k++)
{
pixel_array[k].row(i).copyTo(coronal_section[i].row(k));
}
}
return coronal_section;
}

// Get sagittal section slice
std::vector get_sagittal() {
std::vector sagittal_section(slice_width, cv::Mat(slice_height, slice_num, CV_16UC1, cv::Scalar(0)));
for (int j = 0; j < slice_width; j++)
{
for (int k = 0; k < slice_num; k++)
{
pixel_array[k].col(j).copyTo(sagittal_section[j].col(k));
}
}
return sagittal_section;
}
//get transverse section slice
std::vector get_transverse()
{
return pixel_array;
}

Я использовал imshow для отображения поперечной, фронтальной и сагиттальной плоскостей, но фронтальная и сагиттальная плоскости не могли отображаться должным образом. Я попытался настроить их векторные типы данных на (CV_8UC1), но результаты оказались еще хуже. Вот результат。
после изменения двух изменений изображение отображается правильно.
но я не знаю, почему первый не работает.

Код: Выделить всё

std::vector get_coronal() {
std::vector coronal_section(slice_width);
for (int i = 0; i < slice_width; i++) {
cv::Mat slice(slice_num, slice_height, CV_16UC1);
for (int j = 0; j < slice_num; j++) {
pixel_array[j].row(i).copyTo(slice.row(j));
}
coronal_section[i] = slice;
}
return coronal_section;
}

std::vector get_sagittal() {
std::vector sagittal_section(slice_height);
for (int i = 0; i < slice_height; i++) {
cv::Mat slice(slice_width,slice_num , CV_16UC1);
for (int j = 0; j < slice_num; j++) {
pixel_array[j].col(i).copyTo(slice.col(j));
}
sagittal_section[i] = slice;
}
return sagittal_section;
}
здесь введите описание изображения, почему два способа инициализации приводят к разным результатам

Подробнее здесь: https://stackoverflow.com/questions/791 ... ctor-of-25
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»