我现在正在使用 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];
我搜索了很长时间,但我想我将无法找到它。请帮我 !
我现在正在使用 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];
我搜索了很长时间,但我想我将无法找到它。请帮我 !
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];
}
}
鉴于,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
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++ 中是不可能的。或者我找不到。
感谢您的所有回答。