gpt4 book ai didi

opencv - IplImage 像素访问 JavaCV

转载 作者:太空宇宙 更新时间:2023-11-03 20:48:52 25 4
gpt4 key购买 nike

我正在尝试逐个访问 IplImage 的像素。我正在使用 Java 和 Processing,有时我需要逐个像素地访问。到目前为止我已经这样做了,但我不知道出了什么问题:

public IplImage PImageToIplImage(PImage imageSrc)
{
IplImage imageDst;
if(imageSrc.format==RGB)
{
imageDst = IplImage.create(imageSrc.width, imageSrc.height, IPL_DEPTH_8U, 3);
ByteBuffer imagePixels=imageDst.getByteBuffer();
int locPImage, locIplImage, x, y;
for(y=0; y<imageSrc.height; y++)
for(x=0; x<imageSrc.width; x++)
{
locPImage = x + y * width;
locIplImage=y*imageDst.widthStep()+3*x;
imagePixels.put(locIplImage+2, (byte)(red(imageSrc.pixels[locPImage])));
imagePixels.put(locIplImage+1, (byte)(green(imageSrc.pixels[locPImage])));
imagePixels.put(locIplImage, (byte)(blue(imageSrc.pixels[locPImage])));
}
}
}

经过Karlphilip sugestion,我来到这里,还是不行。当我尝试显示时,它给了我一个 nullPointer 异常:

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 locPImage, x, y;
for(y=0; y<imageSrc.height; y++)
for(x=0; x<imageSrc.width; x++)
{
locPImage = x + y * width;
CvScalar scalar = new CvScalar();
scalar.setVal(0, red(imageSrc.pixels[locPImage]));
scalar.setVal(1, green(imageSrc.pixels[locPImage]));
scalar.setVal(2, blue(imageSrc.pixels[locPImage]));
cvSet2D(imagePixels, y, x, scalar);
}
imageDst = new IplImage(imagePixels);

最佳答案

在 JavaCV 中迭代每个像素的最快方法是:

ByteBuffer buffer = image.getByteBuffer();

for(int y = 0; y < image.height(); y++) {
for(int x = 0; x < image.width(); x++) {
int index = y * image.widthStep() + x * image.nChannels();

// Used to read the pixel value - the 0xFF is needed to cast from
// an unsigned byte to an int.
int value = buffer.get(index) & 0xFF;

// Sets the pixel to a value (greyscale).
buffer.put(index, value);

// Sets the pixel to a value (RGB, stored in BGR order).
buffer.put(index, blue);
buffer.put(index + 1, green);
buffer.put(index + 2, red);
}
}

关于opencv - IplImage 像素访问 JavaCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14877383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com