嗨,我刚开始使用c ++ / openCv并尝试编写中值代码 我很困惑......
EDIT2: 好的,谢谢亲爱的朋友,我的第一个错误得到纠正 现在这是我的新错误:| 我想排序9 elemented Mat文件。我可以使用另一种类型的窗口而不是Mat文件吗?我该如何核心排序
错误指的是这一行: std :: sort(window.begin(),window.end()); 错误:请求会员'开始'在'窗口',这是非类型' cv :: Mat [9]' | | 36 | error:请求会员'结束'在'窗口',这是非类型' cv :: Mat [9]' |
我超越了matlab,我在c ++上找到了一个完整的菜鸟,这是我的代码:
using namespace std;
using namespace cv;
Mat img_gray,img;
int main ()
{
img = imread( "6.jpg", IMREAD_COLOR ); // Load an image
if( img.empty() )
{ return -1; }
cvtColor( img, img_gray, COLOR_BGR2GRAY );
int M = img.rows;
int N = img.cols;
cvNamedWindow("windows",WINDOW_AUTOSIZE);
imshow("windows",img);
for (int m = 2; m < M - 1; ++m)
for (int n = 2; n < N - 1; ++n)
{
int k = 0;
int tmpmedian = 0;
//int window[9]={0};
Mat window[9];
for (int i = m - 1; i < m + 2; ++i){
for (int j = n - 1; j < n + 2; ++j)
{
window[k++] = img_gray.at<uchar>(i, j);
}
std::sort(window.begin(), window.end());
tmpmedian = window[5];
fimg[m][n] = tmpmedian;
}
}
}
我是一名学生,需要我的班级项目 我非常感谢您的回复
答案 0 :(得分:0)
在双for
循环中,试试这个。
int k = 0;
int tmpmedian = 0;
int window[9]={0};
for (int i = m - 1; i < m + 2; ++i)
for (int j = n - 1; j < n + 2; ++j)
window[k++] = img_gray.at<uchar>(i, j);
std::sort(std::begin(window), std::end(window));
tmpmedian = window[4];
fimg[m][n] = tmpmedian;
Mat window[9]
声明一个9 Mat
类型对象的数组。我不认为你想要那个。您只需要一个包含9个int
值的数组。所以你需要的是int window[9]
。
您对std::begin()
和std::end()
的使用是错误的。 std::sort(std::begin(window), std::end(window))
就是您所需要的。
数组索引从零开始。因此,您的中位数存储在window[4]
而不是window[5]
。