我有一个简单的函数,试图在单个通道cv :: Mat中循环遍历所有像素。它无法正常运行。我正在ios sim上的xcode中运行它。
cv::Mat fillEdge(cv::Mat floated) {
float currentColor = 255.0;
cv::Size shape = floated.size();
int h = shape.height;
int w = shape.width;
int count = 1;
for(int y = 0; y!= h; y++) {
for(int x = 0; x!= w; x++) {
cv::Point2i p(y, x);
floated.at<int>(p) = currentColor;
}
}
std::cout << floated.channels() << std::endl;
// prints 1
std::cout << floated << std::endl;
return floated;
}
由于某种原因,它会打印出条纹图像。
这是函数返回之前cv :: Mat的输出的样子
[255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0,
0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0,
0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, ...
答案 0 :(得分:1)
您应该使用setTo
:
cv::Mat fillEdge(cv::Mat floated) {
float currentColor = 255.0;
floated.setTo(cv::Scalar(currentColor));
return floated;
}
答案 1 :(得分:0)
好的,我更改了for
循环条件检查,更改了Point2i
的定义,并将at
方法的模板类型从int
更改为{{ 1}},以保持类型的完整性。
这现在应该可以工作:
float