java for mat,在Java绑定中通过OpenCV Mat进行循环

I am trying to convert a C++ method from a previous answer I received using OpenCV to Java using OpenCV Java bindings

我正在尝试将以前使用OpenCV得到的答案转换为使用OpenCV Java绑定的Java

C++ code:

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<:point> points;

cv::Mat_::iterator it = gray.begin();

cv::Mat_::iterator end = gray.end();

for (; it != end; it++)

{

if (*it)

points.push_back(it.pos());

}

I can't figure out how to loop through the gray variable as they are in C code. Below is what I've got so far:

我不知道如何循环灰色变量,因为它们在C代码中。下面是我到目前为止所得到的:

Java Code:

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 p = new ArrayList();

//How to loop through the gray variable?

I went through the API's and it seems that Mat does have methods for getting rows and cols but I can't call Iterator on anything..

我浏览了API,似乎Mat确实有获取行和cols的方法,但我不能调用Iterator。

1 个解决方案

#1

2

If the Mat is truly gray, it's probably of type CV_8U:

如果垫子真的是灰色的,它可能是CV_8U类型:

for (int i = 0; i < gray.rows; i++)

{

for (int j = 0; j < gray.cols; j++)

{

byte pixel = gray.get(i, j);

}

}

I don't have my environment setup to test this code. For more info check this thread.

我没有环境设置来测试这段代码。要了解更多信息,请查看这个线程。

If you are using JavaCV, some time ago I wrote a code to iterate on the pixels of a colored image and convert it to grayscale like this:

如果您正在使用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

for(x=0; 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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值