常用的畫素操作演算法:影象加法、畫素混合、提取影象中的ROI
影象可以是看成是一個多維的陣列。讀取一張圖片,可以看成是讀入了一系列的畫素內容。這些畫素內容,按照不同的模式具有不同的格式。對於三通道的 RGB 點陣圖來說,每個畫素是一個 8-bit 整數的三元組。影象的畫素操作是比較基礎的影象演算法,下面列舉三個常用的畫素操作演算法。
影象加法
影象的加法表示兩個輸入影象在同一位置上的畫素相加,得到一個輸出影象的過程。
imageProcessor =Operator.add(imageProcessor1,imageProcessor2);
if(imageProcessor!=null){
CV4JImage resultCV4JImage
=new CV4JImage(imageProcessor.getWidth(), imageProcessor.getHeight(), imageProcessor.getPixels());
result.setImageBitmap(resultCV4JImage.getProcessor().getImage().toBitmap());
}
Operator的add表示矩陣加法,有一個要求兩個影象必須大小一致。
publicstaticImageProcessor add(ImageProcessor image1,ImageProcessor image2){
if
(!checkParams(image1, image2)){
returnnull;
}
int channels = image1.getChannels();
int w = image1.getWidth();
int h = image1.getHeight();
ImageProcessor dst =(channels ==3)?newColorProcessor(w, h):newByteProcessor(w, h);
int size = w*h;
int a=0, b=0;
int c=0;
for(int i=0; i<size; i++){
for(int n=0; n<channels
; n++){
a = image1.toByte(n)[i]&0xff;
b = image2.toByte(n)[i]&0xff;
c =Tools.clamp(a + b);
dst.toByte(n)[i]=(byte)c;
}
}
return dst;
}
在實際工作中,可以通過一張原圖和一個mask影象來相加合成一些不規則的效果圖片。
畫素混合
在這裡混合是線性混合,跟之前的影象加法有一定的區別。
imageProcessor =Operator.addWeight(imageProcessor1,2.0f,imageProcessor2,1.0f,4);
if(imageProcessor!=null){
CV4JImage resultCV4JImage =new CV4JImage(imageProcessor.getWidth(), imageProcessor.getHeight(), imageProcessor.getPixels());
result.setImageBitmap(resultCV4JImage.getProcessor().getImage().toBitmap());
}