[英]Getting the centriod of a circle Turbo C++
又是我。 Turbo C++ 是真正的古老。 我在获取圆的质心时遇到了问题,我编写了一个程序来显示质心的坐标,但显示器显示的是 -NAN,-NAN 而不是数字。 请指教,thnx。
unsigned char *p = rgbImage; //rbgImage = new unsigned char [ 160 * 120 * 4 ]
unsigned char *q = image; //image = new unsigned char [ 160 * 120 * 1 ]
int n = 0;
float LaserX = 0, LaserY = 0;
char* LaserMID = new char[255];
for( int j = 0; j < 120; j++ ) {
for( int i = 0; i < 160; i++ ) {
*q++ = *p++;
if ( *q >= Thrshld ) {
LaserX += j;
LaserY += i;
n = n + 1;
}
}
}
LaserX = LaserX/n;
LaserY = LaserY/n;
sprintf(LaserMID, "%.1f, %.1f", LaserX, LaserY);
ShowCo->Text = LaserMID;
您需要在除法之前检查n
是否非零。
您需要处理 q 所指向的值都不大于阈值的情况:在这种情况下,n 保持为 0,最终除以 0。
此外,我不明白你为什么使用*q++ = *p++;
很难阅读(好吧,我不知道 ++ 是否发生在双方分配之前或之后)
关于原始数据,变量的名称和大小似乎表明您的 p 指针应该增加更多(例如 3 或 4 而不是 1)以始终检查相同的颜色并且不使用所有 colors 并覆盖 1/3图片(假设 memory 表示为 pixel_0_r,pixel_0_g,pixel_0_b, pixel_1_r, pixel_1_g, pixel_1_b ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.