我是图像处理和openCV的新手,我正在尝试实现这一点 Algorithm
在本文Shadow And Highlight Invariant Colour Segmentation Algorithm For Traffic Signs
中找到这是我的代码
public class rastara {
public static double normalizedH(double p) {
double scale=(p-0)/360;
double val = 255*scale;
return val;
}
public static double normalizedSV(double p) {
double scale= p/1;
double val = 255*scale;
return val;
}
public static void main (String[] args){
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
Mat img = Highgui.imread("/Users/speedSign.jpg");
Mat hsv = new Mat();
Imgproc.cvtColor(img, hsv, Imgproc.COLOR_RGB2HSV);
Mat hsvNew = hsv.clone();
for(int i= 0; i<hsv.rows(); i++){
for(int j= 0; j<hsv.cols(); j++){
double[] hsvPixel = hsv.get(i,j);
double H = hsvPixel[0];
double S = hsvPixel[1];
double V = hsvPixel[2];
if((H>240 && H<=255) || (H>=0 && H<10)) {
hsvPixel[0] = 255;
}
if(S<40) {
hsvPixel[0] = 0;
}
if((V<30) || (V>230)) {
hsvPixel[0] = 0;
}
hsvNew.put(i,j,hsvPixel);
}
}
}
}
我所做的是使用RGB
方法将HSV
转换为openCV
,我没有将像素标准化,因为我理解由{{1}转换的HSV的像素范围}与本文所要求的openCV
相同但当我尝试使用我的代码时,它永远不会将像素0<H<255 0<S<255 0<V<255
值更改为H
或1
。
算法的最后一部分我实际上并不知道如何实现这一点。