IplImage の 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, 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);