opencv – IplImage Pixel Access JavaCV
发布时间:2020-05-24 09:12:16 所属栏目:Java 来源:互联网
导读:我正在尝试访问Ipl Image的Pixel by Pixel.我使用 Java和Processing,有时我需要逐像素访问.到目前为止我已经这样做了,但我不知道出了什么问题: public IplImage PImageToIplImage(PImage imageSrc) { IplImage imageDst; if(imageSrc.format==
|
我正在尝试访问Ipl Image的Pixel by Pixel.我使用 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消化之后,我来到这里,仍然没有工作.当我尝试显示时,它给了我一个nullPointer异常: imageDst = IplImage.create(imageSrc.width,3);
CvMat imagePixels = CvMat.createHeader(imageDst.height(),imageDst.width(),CV_32FC1);
cvGetMat(imageDst,imagePixels,null,0);
int locPImage,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,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);
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
