注意:这些问题与OpenCVSharp v3.1.20160114。
有关问题1。
如下例所示,我希望有一个红色正方形,但结果是黑色,带有奇怪的彩色条纹。
public void TestMethod()
{
var mat = new Mat(300, 300, MatType.CV_8UC3, Scalar.White);
for (int i = 100; i < 200; i++)
for (int j = 100; j < 200; j++)
mat.Set(i, j, Scalar.Red);
Cv2.ImShow("red square", mat);
Cv2.WaitKey();
}
结果
我将Scalar.Red
编辑为16711680
(整数为#FF0000)并且有效。这是预期的行为吗?或OpenCvSharp中的错误?
问题2。
为什么盒子右侧有多条垂直条纹颜色?当我转向红色方块时,右侧仍有黄色。
右侧有黄色条纹
问题3。
Python可以访问每个频道并设置值(颜色),如下所示。
mat.itemset((pixel[1], pixel[0], 2), 255) # Red channel to 255.
OpenCvSharp中是否有类似的方法?
答案 0 :(得分:0)
我认为主要问题是您尝试一次设置3通道图像的颜色。如果您按照以下网址或代码段中的代码进行操作,我认为您的所有3个问题都已得到解答。
我按照这些说明操作,没有任何问题。 here.
//Option1
var mat = new Mat(300, 300, MatType.CV_8UC3, Scalar.White);
for (int i = 100; i < 200; i++)
for (int j = 100; j < 200; j++)
{
Vec3b color = mat.Get<Vec3b>(i, j);
color.Item0 = 0;
color.Item1 = 0;
color.Item2 = 255;
mat.Set<Vec3b>(i, j, color);
//mat.Set(i, j, Scalar.Red);
}
Cv2.ImShow("red square", mat);
Cv2.WaitKey();
}
//Option2
var mat = new Mat(300, 300, MatType.CV_8UC3, Scalar.White);
var indexer = mat.GetGenericIndexer<Vec3b>();
for (int i = 100; i < 200; i++)
for (int j = 100; j < 200; j++)
{
Vec3b color = mat.Get<Vec3b>(i, j);
color.Item0 = 0;
color.Item1 = 0;
color.Item2 = 255;
indexer[i, j] = color;
}
Cv2.ImShow("red square", mat);
Cv2.WaitKey();
}
此代码显示上述URL中的三个选项中的两个,即OpenCvSharp中的文档像素级访问。