C++ 为什么?特定像素处理应该是处理(h,w)而不是(w,h)或(x,y)
一些关于使用OpenCV进行图像处理的示例代码给出了如下内容:C++ 为什么?特定像素处理应该是处理(h,w)而不是(w,h)或(x,y),c++,opencv,C++,Opencv,一些关于使用OpenCV进行图像处理的示例代码给出了如下内容: for(i=0;i<height;i++) { for(j=0;j<width;j++) { if(pointPolygonTest(Point(i,j),myPolygon)) { // do some processing } } } for(i=0;i介于[0..Height]和[0.
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
if(pointPolygonTest(Point(i,j),myPolygon))
{
// do some processing
}
}
}
for(i=0;i介于[0..Height]和[0..Width]之间的范围是您工作区域的最大边界
此代码正在测试整个图像的哪些像素位于多边形内myPolygon
“完整”一词意味着您应该检查图像的所有像素,因此您应该从0到高度迭代Y,从0到宽度迭代X。实际上,在这里,行/列约定用于迭代整个图像
高度=行数
宽度=列数
图像是按行访问的。外循环在图像的行上迭代,内循环在列上迭代。因此基本上,i
是图像的当前行,j
是图像的当前列
内部循环处理一整行图像。为什么我们需要从高度和宽度开始?
与之相反?它不是从高度和宽度开始。它分别从高度和宽度开始。它从高度和宽度开始,分别从高度和宽度开始.对不起,可能弄错了,我只是想写下来“为什么我们不迭代列前每一行的像素?-我想我得到了一些要点,谢谢。这意味着,我还替换了宽度的I和高度的j…这将得到相同的结果?实际上,我的问题是为什么我们需要从每一行像素开始迭代。如果I是高度,j是宽度,这意味着点(I,j)是否表示(y,x)?(据我所知,x坐标表示行,y坐标表示像素位置右侧的列?)抱歉,如果这不是一个好问题?这是迭代所有图像像素的常用方法。在您的情况下,将两个交换为行将导致相同的结果。如果仅交换宽度和高度没有差异。这意味着您的宽度等于高度并且您的正方形图像我得到了我只是把位置坐标(即(x,y)位置)和像素操作搞错了。谢谢你的回答。