Как использовать побитовые операторы для всей строки или столбца?

Я смотрю обработки изображений с C ++ OpenCV в настоящее время. И мне нужно сделать ‘или’ каждый столбец или строку матрицы. например

A =[1 0 1 0;
0 0 0 0;
0 1 0 0];

I need to take for row
Ans = [1 1 1 0];

for column
Ans =[1;
0;
1];

Я долго искал, но я думаю, что не смогу его найти. Помогите мне, пожалуйста !

0

Решение

Если ваши данные разбиты на строки и столбцы как:

const int rows = 3;
const int cols = 4;
int A[rows][cols] = {1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0};

тогда вы можете использовать:

int ansrow[cols], anscol[rows];
int i, j;
for (i = 0; i < cols; i++ ){
ansrow[i] = 0;
for (j = 0; j < rows; j++ ){
ansrow[i] |= A[i][j];
}
}
for (i = 0; i < rows; i++ ){
anscol[i] = 0;
for (j = 0; j < cols; j++ ){
anscol[i] |= A[i][j];
}
}
0

Другие решения

учитывая, что Ans_row — это cv :: Mat и Ans_row.cols == mat.cols, вы можете легко написать:

Mat a = Ans_row | mat.row(i); //expects: Ans_row.cols== mat.cols, Ans_row.rows==1

а также:

Mat b = And_col | mat.col(i); //expects: Ans_col.rows== mat.rows, Ans_row.cols==1
0

rgb [1] — моя матрица,

cv::Size s = rgb[1].size();

bitwise_or(rgb[1].col(1),rgb[1].col(2),asd1);
for(i = 3;i<s.width;i++)
{
bitwise_or(rgb[1].col(i),asd1,asd1);
}

Сначала я хотел сделать эту работу без какого-либо цикла, как команда matlab any (). Но я думаю, что это невозможно в C ++. или я не смог найти.

Спасибо за все ответы.

0
По вопросам рекламы [email protected]