opencv4

Goals

  • 了解线性混合
  • 使用 addWeighted() 混合两张图像

Code

C++:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int (int argc, char *argv[])
{
std::string imagePath1 = "./japan.jpg";
std::string imagePath2 = "./beach.jpg";
cv::Mat src1 = cv::imread(imagePath1);
cv::Mat src2 = cv::imread(imagePath2);

if (src1.empty() || src2.empty())
{
std::cout << "Can't load images!" << std::endl;
return -1;
}

cv::Mat dst;
double alpha = 0.5;
double beta = 1 - alpha;
cv::addWeighted(src1, alpha, src2, beta, 0.0, dst);

cv::imshow("dst", dst);
cv::waitKey();
cv::destroyAllWindows();
return 0;
}

Python:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def ():
image_path1 = './japan.jpg'
image_path2 = './beach.jpg'
src1 = cv2.imread(image_path1)
src2 = cv2.imread(image_path2)
if src1 is None or src2 is None:
print("Can't open images!")
return
alpha = 0.5
beta = 1 - alpha
dst = cv2.addWeighted(src1, alpha, src2, beta, 0.0)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

if __name__ == "__main__":
main()

Explanation

上述代码首先分别读取两张分辨率相同的图像,然后使用 addWeighted 函数将两者以 g(x, y) = alpha * f(x, y) + beta * h(x, y) 混合一起,,并显示出来。

Reference