我正在尝试将使用OpenCV收到的先前答案中的C++方法转换为使用OpenCV Java绑定的Java
C ++代码:
cv::Mat gray;
cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS,
cv::Size(2 * erosion_size + 1, 2 * erosion_size + 1),
cv::Point(erosion_size, erosion_size) );
cv::erode(gray, gray, element);
// Scan the image searching for points and store them in a vector
std::vector<cv::Point> points;
cv::Mat_<uchar>::iterator it = gray.begin<uchar>();
cv::Mat_<uchar>::iterator end = gray.end<uchar>();
for (; it != end; it++)
{
if (*it)
points.push_back(it.pos());
}
我不知道如何gray
像在C代码中那样遍历变量。以下是到目前为止我得到的:
Java代码:
Mat gray = new Mat();
Mat element = Imgproc.getStructuringElement(
Imgproc.MORPH_CROSS, new Size(2 * erosion_size + 1, 2 * erosion_size + 1), new Point(erosion_size, erosion_size)
);
Imgproc.erode(img, gray, element);
List <Point> p = new ArrayList<Point>();
//How to loop through the gray variable?
我经历了API,似乎Mat
确实有获取方法rows
,cols
但是我Iterator
什么也不能调用。
如果Mat
确实是 灰色 ,则可能是以下类型CV_8U
:
for (int i = 0; i < gray.rows; i++)
{
for (int j = 0; j < gray.cols; j++)
{
byte pixel = gray.get(i, j);
}
}
我没有设置环境来测试此代码。有关更多信息,请检查此线程。
如果您使用的是 JavaCV ,前段时间,我编写了一个代码来对彩色图像的像素进行迭代,然后将其转换为灰度,如下所示:
IplImage imageSrc = cvLoadImage("pipeline.png", CV_LOAD_IMAGE_COLOR);
if (imageSrc == null)
{
System.out.println("!!! Failed loading image");
return;
}
double r, g, b;
r = g = b = 0.0;
IplImage imageDst = IplImage.create(imageSrc.width(), imageSrc.height(), IPL_DEPTH_8U, 3);
CvMat imagePixels = CvMat.createHeader(imageDst.height(), imageDst.width(), CV_32FC1);
cvGetMat(imageDst, imagePixels, null, 0);
int x, y;
for(y=0; y<imageSrc.height(); y++)
for(x=0; x<imageSrc.width(); x++)
{
CvScalar rgb = cvGet2D(imagePixels, y, x);
r = rgb.val(0);
g = rgb.val(2);
b = rgb.val(1);
double gray = (r + g + b) / 3;
CvScalar scalar = new CvScalar();
scalar.setVal(0, gray);
scalar.setVal(1, gray);
scalar.setVal(2, gray);
cvSet2D(imagePixels, y, x, scalar);
}
imageDst = new IplImage(imagePixels);
IplImage result = new IplImage(imagePixels);
cvSaveImage("manual_gray.png", result);
cvReleaseImage(imageSrc);
在给定的数组中,我想计算左边唯一的连续值,这些值小于或等于每个值。 例如在下面的数组中,第一个索引值是100,所以没有比它更小的值,它将是1。对于值70,有60比它小,所以计数是2,依此类推。 注意:这应该使用stack来完成(这是一个stack实践问题)。 我的方法是: 我试图用这种方式解决: 在数组中运行循环,每次向堆栈添加数组值 问题:现在的问题是:因为它第一次会正常工作,但下一次不会。 问
在Visual Studio中,使用C#,我得到了三个类似于以下内容的数组: 布尔购物车表示复选框。现在我想做的是,使用一个按钮,检查勾选了哪些框,然后从数组商品中获取商品的名称,并从数组价格中获取商品的价格。然后,我将连接字符串,并将总和相加,然后将其显示在MessageBox中。显示。 我想我需要以某种方式将cart数组的索引与price和goods数组的相应索引联系起来。还是有更好的方法?可
问题内容: 我正在尝试遍历以下内容 我到目前为止所得到的: 有任何想法吗? 问题答案: 在您的代码中,元素是JSON对象的数组,而不是JSON对象本身。元件,和是JSON的一部分内部对象JSON阵列。 您需要遍历数组 版画 我不知道您的代码片段来自何处。
问题内容: 因此,我以为我可以像普通对象一样遍历localStorage,因为它具有长度。我该如何循环? 如果我这样做,则返回正确。所以我认为循环会起作用。 我在想类似的东西: 但无济于事。有任何想法吗? 我的另一个想法是 在其中工作。 问题答案: 您可以使用该方法。 返回第一个键(顺序是实现定义的,但是在您添加或删除键之前是恒定的)。 如果顺序很重要,则可以存储JSON序列化数组: 规范草案声称
问题内容: 我有一个具有1 2 3 4 5值的数组。 现在我想以循环方式遍历它。像我想打印2 3 4 5 1或3 4 5 1 2或5 1 2 3 4等等。有什么 算法 吗? 编辑: 我想以循环方式打印所有组合。我不想在初始阶段说明起点。 问题答案: (如果要从向下迭代数组,请在数组下标表达式中更改为。) 我应该注意,就执行速度而言,这可能不是表达循环的最有效方法。但是,差异很小,并且 很可能无关紧
我的Flutter项目中有一个Dart枚举,如下所示: 如果我有一些随机枚举状态,如,我如何迭代到下一个枚举(而不需要做一些事情,如用开关语句映射它们)? 我在这个,这个和这个的帮助下找到了答案,所以我把它贴在下面。