OpenCVSharp4で逆投影

逆投影とは

2つの画像のヒストグラム中で近しいものを強調すること

プログラム

 

using System;  
using OpenCvSharp;  

namespace 逆投影 {  
    class Program {  
        static void Main(string[] args) {  
            //画像の読み込み  
            Mat src1 = new Mat(@"D:\Back_Projection_Theory0.jpg");  
            Mat src2 = new Mat(@"D:\Back_Projection_Theory2.jpg");  
            Cv2.ImShow("src1", src1);  
            Cv2.ImShow("src2", src2);  


            //src1をHSVに変換しHue(色相)のみを取り出す  
            src1.CvtColor(ColorConversionCodes.BGR2HSV);  
            Mat[] _hsv = src1.Split();  
            Mat hue = _hsv[0];  

            //src2をHSVに変換しHue(色相)のみを取り出す  
            src2.CvtColor(ColorConversionCodes.BGR2HSV);  
            Mat[] _hsv2 = src2.Split();  
            Mat hue2 = _hsv2[0];  

            //Hueヒストグラム作成  
            Mat hist = new Mat();  
            Cv2.CalcHist(new Mat[] { hue }, new int[] { 0 }, null, hist, 1, new int[] { 256 }, new Rangef[] { new Rangef(0, 256), });  
            hist.Normalize(0, 255, NormTypes.MinMax);  

            //hu2  
            Mat backProj = new Mat();  
            Cv2.CalcBackProject(new Mat[] { hue2 }, new int[] { 0 }, hist, backProj, new Rangef[] { new Rangef(0, 180)});  
            Cv2.ImShow("backProject", backProj);  



            Cv2.WaitKey();  
        }  
    }  
}  

参考

http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_histograms/py_histogram_backprojection/py_histogram_backprojection.html
https://docs.opencv.org/4.0.0/da/d7f/tutorial_back_projection.html