在数组指针这里弄不明白了
在学ti c55x,试了下网上的图像处理例程后,自己参考着写了二值化的程序。#define IMAGEWIDTH 80
#define IMAGEHEIGHT 80
extern unsigned char dbImage; //dbImage待处理的图像
extern unsigned char dbTargetImage; //dbTargetImage,二值化后的图像
unsigned char *p2TargetImage;
void img2bw(unsigned char *pImage, int nWidth, int nHeight) // pImage <---dbImage
{
unsigned int x, y,i;
p2TargetImage = dbTargetImage; //目标数组首地址赋给p2Tger指针
for (i=0; i<IMAGEWIDTH; i++, p2TargetImage++)// 存在疑问的地方
(*p2TargetImage) = 0;
for(x = 0; x< IMAGEHEIGHT; x++)
{
for(y = 0; y< IMAGEWIDTH; y++)
{
if(*pImage <125) *p2TargetImage = 0;
else *p2TargetImage = 255;
pImage++;
p2TargetImage++;
}
}
}
1。注释疑问的部分,为什么循环条件是<IMGWIDTH,定义的数组长度是IMGWIDTH*IMGHEIGHT啊,
按照上面的想法修改代码后,发现是错的,如果改成IMGWIDTH*IMGHEIGHT,,,发现最后二值化的数据传递到dbImage数组去了,也不知道为什么
2.注释疑问的地方代码存在有什么好处,不要也可以正常跑
多谢各位了,另外,感觉c5000做图像处理似乎不太合适诶,有谁出二手的DSP开发板出,好贵 没看明白 问题没听太明白。 是不是不是一个指针啊?(*p2TargetImage)
*pImage淘宝上的C5000开发板不贵啊
for (i=0; i<IMAGEWIDTH; i++, p2TargetImage++)// 存在疑问的地方
(*p2TargetImage) = 0;
1.估计是写漏了,就是*p2TargetImage初始化而已;
2。通过后面程序可知,这步可以不要 luofeng2g 发表于 2016-3-3 13:15
for (i=0; i
谢谢回答
2. 这句话可以不要,我也这样认为,事实上也没什么影响;
1. 这个初始化不是写漏,而是不能写成 i < IMAGEWIDTH*IMAGEHEIGHT, 不然后结果错误(
dbImage指向的是原始图像数组首地址,而p2TargetImage指向的是目标图像,也就二值化后的图像地址。
如果写成 i< IMAGEWIDTH*IMAGEHEIGHT, 在ccs3.3中,执行完该函数后,dbTargetImage未能正确显示预想的结果,而dbImage的图像产生了变化(之前一次调试是显示本该在dbTargetImage显示的二值图像,今天试了一下,虽然也是二值图像,但该图像沿对角线平移了一些))在CCS v4也调了下,也是这样莫名其妙的错误,但是现象有点不同。而i < IMAGEWIDTH的话,一切正常。 trysomething 发表于 2016-3-3 23:30
谢谢回答
2. 这句话可以不要,我也这样认为,事实上也没什么影响;
你也可以像下面那种方式写,试试;还有具体现象是什么,说清楚点! luofeng2g 发表于 2016-3-4 09:17
你也可以像下面那种方式写,试试;还有具体现象是什么,说清楚点!
后续sobel函数的先不说了,也是奇怪的结果
页:
[1]