我是OpenCV的新手。我有一个图像我想要的是用任何单一颜色改变图像的每个像素的颜色。 我找到了代码,但是当我运行这部分代码时,就会生成异常。
for (i = 0;i < img1.rows;i++) {
for (j = 0;j < img1.cols;j++) {
img1.at<Vec3b>(i, j) = Vec3b(255, 105, 240);
}
}
任何人都可以告诉我解决方案。 或者我发现这需要花费大量时间进行转换所以如果他们有任何其他方法,那么请告诉我。
答案 0 :(得分:1)
您可以使用Mat::operator()选择roi,然后为其指定值。
void main()
{
cv::Mat img = cv::Mat::ones(5, 5, CV_8UC3);
img({2, 4}, {2, 4}) = cv::Vec3b(7, 8, 9);
cout << img;
}
这将打印
[ 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0;
1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0;
1, 0, 0, 1, 0, 0, 7, 8, 9, 7, 8, 9, 1, 0, 0;
1, 0, 0, 1, 0, 0, 7, 8, 9, 7, 8, 9, 1, 0, 0;
1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0]
答案 1 :(得分:1)
// Make a 3 channel image
cv::Mat img(480,640,CV_8UC3);
// Fill entire image with cyan (blue and green)
img = cv::Scalar(255,255,0);
答案 2 :(得分:0)
要使用单色填充图像,请使用带有CV_FILLED参数的rectangle。
(可能有一些原因导致异常 - 未创建图像,错误的像素格式等 - 很难诊断给定信息的问题)