我想了解更多关于如何在图像中标记像素的信息。我想使用 Caffe 中的算法来提出边缘检测程序。到目前为止,我已经过滤了图像以获得边缘并成功编写了代码来检测像素是否是边缘(依赖于其相邻像素)。我现在要做的就是将这些标记为边缘,以便我可以将它们作为训练数据提供给我的算法。我是 C++ 和 Caffe 的初学者。我真正需要的是有人来解释标签的确切工作原理,我会说去它认为是边缘的每个像素并给它边缘的值 1 和非边缘的值 0 吗?如果是这样,我该怎么做?参考资料和分步指南非常受欢迎,因为我在这项任务上已经苦苦挣扎了一段时间。
好的,例如我达到了这个代码:
Mat pixelComparisonAlg(Mat img){
Mat img_gray;
img_gray = navigateImage(img.clone());
for(int x=0; x < img_gray.cols-1 ; x++){
for(int y=0; y < img_gray.rows-1; y++ ){
Vec3b value1 = img_gray.at<Vec3b>(Point(x+1,y+1));
Vec3b value2 = img_gray.at<Vec3b>(Point(x+1,y));
Vec3b value4 = img_gray.at<Vec3b>(Point(x,y+1));
Vec3b value = img_gray.at<Vec3b>(Point(x,y));
if( value1 != value || value != value2 || value!= value4){
//EDGE!
value.val[0] = 0;
value.val[1] = 0;
value.val[2] = 255;
value1.val[0] = 0;
value1.val[1] = 0;
value1.val[2] = 255;
img_gray.at<Vec3b>(Point(x,y)) = value;
}
else{
value;
}
}
}
return img_gray;
}
int main( int argc, char** argv )
{
Mat img = cv::imread("...", CV_LOAD_IMAGE_COLOR);
if(! img.data){
cout << "could not open or find the image" << endl;
return -1;
}
imshow("edges", pixelComparisonAlg(img.clone()));
cv::waitKey(0);
return 0;
}
是否有可能将这些像素标记为边缘?假设我采用将边缘颜色更改为红色的代码(在 if 语句之后)修改它以将像素标记为边缘或不。因此,我有一个向量携带有关像素的信息:颜色(3 个向量元素)和标签(1 个向量元素)
谢谢