Заточка OpenCV HLS

#c #opencv

#c #opencv

Вопрос:

Я пытаюсь сделать резкость изображения в формате HLS. Я правильно сделал размытие, но заточка не работает.

Я знаю, что Заточка-это:

 1) Blur the Image: Image -gt; Blurred. 2) Make Unsharp Mask: Unsharp_Mask = Image - Blurred. 3) Sharpen the Image: Sharpened = Image   Unsharp_Mask  

Также я знаю, что в HLS вам не нужно делать это на каждом канале, а только на «L». Я сделал это, но это не работает.

Это мой код (я не могу использовать кнопку «код», потому что она выдает ошибку — говорит, что есть части кода, которые неправильно отформатированы как код):

 // UNSHARP MASK HLS Mat* UnsharpHLS = new Mat(PaddedHLS-gt;rows, PaddedHLS-gt;cols, PaddedHLS-gt;type()); Mat* SharpHLS = new Mat(PaddedHLS-gt;rows, PaddedHLS-gt;cols, PaddedHLS-gt;type());  for (int i = 0; i lt; ImageHLS.rows; i  ) {  for (int j = 0; j lt; ImageHLS.cols; j  )  {  UnsharpHLS-gt;atlt;Vec3bgt;(i 1, j 1)[1] = ImageHLS.atlt;Vec3bgt;(i, j)[1] - PaddedHLS-gt;atlt;Vec3bgt;(i   1, j   1)[1];  SharpHLS-gt;atlt;Vec3bgt;(i 1, j 1)[1] = ImageHLS.atlt;Vec3bgt;(i, j)[1]   (UnsharpHLS-gt;atlt;Vec3bgt;(i   1, j   1)[1]);  } }  cvtColor(*SharpHLS, Sharpened, COLOR_HLS2BGR);  

Давайте предположим, что предыдущая часть кода работает (я не получаю никаких ошибок, и я уже пытался это сделать), единственная проблема заключается в упомянутом коде.

Это весь код:

 #include lt;iostreamgt; #include lt;opencv2/opencv.hppgt; #include lt;cstdlibgt; #include lt;math.hgt;  using namespace cv; using namespace std;  int main() {  // CARICAMENTO IMMAGINE  Mat Original = imread("Lena.png", IMREAD_COLOR);   // VERIFICA SE L'IMMAGINE E' STATA LETTA CORRETTAMENTE, IN CASO CONTRARIO RITORNA -1  if (Original.empty())  {  return -1;  }      // CONVERSIONE COLORI  Mat ImageHLS;  Mat ImageRGB;  Mat Blurred;  Mat Sharpened;   cvtColor(Original, ImageRGB, COLOR_BGR2RGB);  cvtColor(Original, ImageHLS, COLOR_BGR2HLS);     // CREAZIONE IMMAGINE HLS PADDED  int FilterSize = 3;  int Padding = FilterSize - 1;  Mat* PaddedHLS = new Mat(ImageHLS.rows   Padding, ImageHLS.cols   Padding, ImageHLS.type());  copyMakeBorder(ImageHLS, *PaddedHLS, Padding / 2, Padding / 2, Padding / 2, Padding / 2, BORDER_DEFAULT);   // BLURRING SU IMMAGINE HLS PADDED  Mat* Filter = new Mat(FilterSize, FilterSize, ImageHLS.type());   for (int i = 1; i lt; PaddedHLS-gt;rows - 1; i  )  {  for (int j = 1; j lt; PaddedHLS-gt;cols - 1; j  )  {  for (int x = 0; x lt; FilterSize; x  )  {  for (int y = 0; y lt; FilterSize; y  )  {  Filter-gt;atlt;Vec3bgt;(x, y)[1] = PaddedHLS-gt;atlt;Vec3bgt;(i - 1   x, j - 1   y)[1];  }  }   PaddedHLS-gt;atlt;Vec3bgt;(i, j)[1] = mean(*Filter).val[1];  }  }   cvtColor(*PaddedHLS, Blurred, COLOR_HLS2BGR);     // UNSHARP MASK HLS  Mat* UnsharpHLS = new Mat(PaddedHLS-gt;rows, PaddedHLS-gt;cols, PaddedHLS-gt;type());  Mat* SharpHLS = new Mat(PaddedHLS-gt;rows, PaddedHLS-gt;cols, PaddedHLS-gt;type());   for (int i = 0; i lt; ImageHLS.rows; i  )  {  for (int j = 0; j lt; ImageHLS.cols; j  )  {  UnsharpHLS-gt;atlt;Vec3bgt;(i 1, j 1)[1] = ImageHLS.atlt;Vec3bgt;(i, j)[1] - PaddedHLS-gt;atlt;Vec3bgt;(i   1, j   1)[1];  SharpHLS-gt;atlt;Vec3bgt;(i 1, j 1)[1] = ImageHLS.atlt;Vec3bgt;(i, j)[1]   (UnsharpHLS-gt;atlt;Vec3bgt;(i   1, j   1)[1]);  }  }   cvtColor(*SharpHLS, Sharpened, COLOR_HLS2BGR);     // VISUALIZZAZIONE IMMAGINI  imshow("Originale", Original);  imshow("Image RGB", ImageRGB);  imshow("Image HLS", ImageHLS);  imshow("Blurred HLS", *PaddedHLS);  imshow("Blurred BGR", Blurred);  imshow("Unsharp HLS", *UnsharpHLS);  imshow("Sharpened HLS", *SharpHLS);  imshow("Sharpened BGR", Sharpened);   //CHIUDI TUTTO  waitKey(0);  destroyAllWindows(); }  

Комментарии:

1. как вы думаете, достаточно ли «не работает»?

2. ну, если в коде что-то не так, я думаю, кто-нибудь заметит. кстати, проблема в том, что заостренное изображение «желтоватое». Как в версиях HLS, так и в версиях BGR это не заостренная версия исходного изображения, а его желтоватая версия.