0

我现在正在使用 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];

我搜索了很长时间,但我想我将无法找到它。请帮我 !

4

3 回答 3

0

If your data is split into rows and cols as:

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

then you may use:

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];
  }
}
于 2014-10-26T06:15:39.410 回答
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
于 2014-10-26T08:20:25.290 回答
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++ 中是不可能的。或者我找不到。

感谢您的所有回答。

于 2014-10-26T11:15:00.157 回答