我有点处于绝望模式,试图找出遗漏的东西。我有一个学校的任务,要求用于边缘检测。我是c ++和编程通用的新手。我有垂直检测的问题,并且代码看起来像这样。
void verticalDetection(std::string in_file, std::string out_file) {
PPM verticals;
std::ifstream input_file(in_file);
std::ofstream output_file(out_file);
input_file >> verticals;
int i, j, k, new_c1, new_c2;
int check = verticals.getMaxColorValue() / 10;
for (i = 0; i < verticals.getHeight() ; i++) {
for (j = 1; j < verticals.getWidth() ; j++) {
for (k = 0; k < 3 ; k++) {
if (k==0) {
double r1 = verticals.getChannel(i, j, k);
double g1 = verticals.getChannel(i, j, k+1);
double b1 = verticals.getChannel(i, j, k+2);
double r2 = verticals.getChannel(i, j-1, k);
double g2 = verticals.getChannel(i, j-1, k+1);
double b2 = verticals.getChannel(i, j-1, k+2);
double c1 = 0.2126*r1 + 0.7152*g1 + 0.0722*b1;
double c2 = 0.2126*r2 + 0.7152*g2 + 0.0722*b2;
new_c1 = (int)c1;
new_c2 = (int)c2;
if ((new_c1 - new_c2 > 0 && new_c1 - new_c2 <= check) || (new_c2 - new_c1 > 0 && new_c2 - new_c1 <= check)) {
verticals.setChannel(i, j, k, 255);
verticals.setChannel(i, j, k+1, 255);
verticals.setChannel(i, j, k+2, 255);
} else {
verticals.setChannel(i, j, k, 0);
verticals.setChannel(i, j, k+1, 0);
verticals.setChannel(i, j, k+2, 0);
}
}
}
}
}
output_file << verticals;
}
虽然输出有一些相似之处,但它看起来与提供的示例完全不同。作业要求这样做。
通过将每个像素的亮度与其左侧的像素进行比较来查找垂直边缘。如果像素的亮度相差最大颜色值的至少10%,则在该像素处检测到边缘。必须将像素设置为检测到边缘的白色和未检测到边缘的黑色。
出于此分配的目的,亮度定义为像素的线性色度值。
我做错了什么?我觉得我的思想存在缺陷。我将提供输出的图像与预期的正确输出。