diff --git a/hpvm/test/benchmarks/pipeline/CMakeLists.txt b/hpvm/test/benchmarks/pipeline/CMakeLists.txt
index cede337ca2f606a9008056f42ad0b8b9c5aec00c..c7c19d4fc0220f1d3f70ba702213f3e149150470 100644
--- a/hpvm/test/benchmarks/pipeline/CMakeLists.txt
+++ b/hpvm/test/benchmarks/pipeline/CMakeLists.txt
@@ -1,5 +1,9 @@
-find_package(OpenCV 2)
+find_package(OpenCV 4)
+if(NOT ${OpenCV_FOUND})
+  find_package(OpenCV 3)
+endif()
 if(${OpenCV_FOUND})
+  message(STATUS "Found OpenCV at ${OpenCV_INCLUDE_DIRS} for HPVM benchmark 'pipeline'")
   foreach(incl_dir ${OpenCV_INCLUDE_DIRS})
     list(APPEND all_flags "-I${incl_dir}")
   endforeach()
@@ -12,5 +16,5 @@ if(${OpenCV_FOUND})
   )
   add_hpvm_cpu_gpu_benchmark("pipeline" "${all_flags}" c++ src/main.cc "")
 else()
-  message(WARNING "opencv-2 not found; not compiling HPVM benchmark 'pipeline'.")
+  message(WARNING "OpenCV (3 or 4) not found; not compiling HPVM benchmark 'pipeline'")
 endif()
diff --git a/hpvm/test/benchmarks/pipeline/src/main.cc b/hpvm/test/benchmarks/pipeline/src/main.cc
index 5fcb205ca7b441d5e01c7c797bc34d53428f1a12..106895eaadce40d8d12f0b9c794f03a9b8f05a6d 100644
--- a/hpvm/test/benchmarks/pipeline/src/main.cc
+++ b/hpvm/test/benchmarks/pipeline/src/main.cc
@@ -10,7 +10,7 @@
  * Main entry of dense matrix-matrix multiplication kernel
  */
 
-#include "opencv2/ocl/ocl.hpp"
+#include "opencv2/core/ocl.hpp"
 #include "opencv2/opencv.hpp"
 #include <cassert>
 #include <hpvm.h>
@@ -747,7 +747,7 @@ void getNextFrame(VideoCapture &VC, Mat &F) {
   VC >> F;
   /// Convert the image to grayscale if image colored
   if (F.channels() == 3)
-    cvtColor(F, F, CV_BGR2GRAY);
+    cvtColor(F, F, COLOR_BGR2GRAY);
 
   F.convertTo(F, CV_32F, 1.0 / 255.0);
 }
@@ -775,12 +775,12 @@ int main(int argc, char *argv[]) {
     return -1;
   }
 
-  int NUM_FRAMES = cap.get(CV_CAP_PROP_FRAME_COUNT);
+  int NUM_FRAMES = cap.get(CAP_PROP_FRAME_COUNT);
   NUM_FRAMES = 600;
   std::cout << "Number of frames = " << NUM_FRAMES << "\n";
 
-  namedWindow(input_window, CV_WINDOW_AUTOSIZE);
-  namedWindow(output_window, CV_WINDOW_AUTOSIZE);
+  namedWindow(input_window, WINDOW_AUTOSIZE);
+  namedWindow(output_window, WINDOW_AUTOSIZE);
   moveWindow(input_window, POSX_IN, POSY_IN);
   moveWindow(output_window, POSX_OUT, POSY_OUT);