【发布时间】:2011-10-26 19:25:23
【问题描述】:
假设我有一个图像矩阵,并且我在一个特定的像素 [比如 4],如下所示:
0 1 2
3 `4` 5
6 7 8
我正在尝试循环遍历所有像素并尝试访问 0、1、2、3、5 6、7、8,我将其值存储在名为 Pixel 的数组中。这是我的尝试使用 OpenCV,请告诉我哪里出错了。
我正在使用指针temp_ptr 来访问IplImage image。
uchar* temp_ptr=0 ;
CvScalar Pixel[3][3];
int rows=image->height,cols=image->width,row,col;
for( row = 0; row < rows-2; ++row)
{
for ( col = 0; col < cols-2; ++col)
{
temp_ptr = &((uchar*)(image->imageData + (image->widthStep*row)))[col*3];
for (int krow = -1 ; krow <= 1; krow++)
{
for (int kcol = -1; kcol <= 1; kcol++)
{
temp_ptr = &((uchar*)(image->imageData + (image->widthStep*row+krow)))[(col+kcol)*3];
for(int i=0; i < 3; i++)
{
for(int j=0; j < 3; j++)
{
for(int k=0; k < 3; k++)
{
Pixel[i][j].val[k]=temp_ptr[k];
}
}
}
}
}
}
}
我不确定如何使用temp_ptr 加载周围的像素,请帮帮我。
【问题讨论】:
-
有六个嵌套的 for 循环几乎肯定是你出错的地方。您需要循环遍历所有像素还是只循环那些可以拥有所有八个“邻居”的像素?
-
只有那些可以有 8 个邻居的人......也是我以同样的方式访问所有像素的方式,我将通过计算所有像素的平均值并存储来自 Color 的新值来存储值[RBG] 数组
Pixel...进入中心,即4像素。 -
你有很多有用的提示。最重要的是您永远不会将结果写回图像中。而且,我不想听起来很苛刻,但正如有人所说“开始学习编程 - 你的代码完全是一团糟”。每个人的代码一开始都是一团糟,我认为你应该尝试自己解决这个问题,并尝试理解你在做什么。你没有 OpenCV 的麻烦。您在编写算法时遇到了麻烦。一旦你把它到位 - 你会没事的! :-)
-
@danbystrom - 我认为你错了,我的算法很好,是的,我知道我应该将值写回像素,我只是放错了大括号......