opencv图像减去c++代码
时间: 2023-09-17 17:13:06 浏览: 216
以下是使用OpenCV进行图像减法操作的代码示例:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img1 = imread("image1.jpg", IMREAD_GRAYSCALE);
Mat img2 = imread("image2.jpg", IMREAD_GRAYSCALE);
// 确保两张图像大小相同
resize(img2, img2, img1.size());
Mat result;
subtract(img1, img2, result);
imwrite("result.jpg", result);
return 0;
}
```
在这个例子中,我们使用了OpenCV的subtract函数来执行图像减法操作。我们首先读取两个图像并确保它们的大小相同,然后将它们传递给subtract函数。subtract函数返回一个Mat对象,表示两个图像的差异。最后,我们将结果保存到一个新的图像文件中。
相关问题
opencv 图像浮雕C++
OpenCV中实现图像浮雕效果的一种方法是将原始图像转换为灰度图像,然后将像素值进行反转(即将255减去原始像素值),然后使用高斯模糊对图像进行平滑处理。接下来,将平滑后的图像与反转后的图像进行差异化处理,以创建浮雕效果。
下面是一个基于OpenCV的C++代码示例:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 读取图像
Mat image = imread("lena.jpg");
// 转换为灰度图像
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
// 反转像素值
Mat inverted;
subtract(Scalar::all(255), gray, inverted);
// 高斯滤波平滑处理
Mat smoothed;
GaussianBlur(inverted, smoothed, Size(5, 5), 0);
// 差异化处理
Mat embossed;
subtract(inverted, smoothed, embossed);
// 显示结果
imshow("Original", image);
imshow("Embossed", embossed);
waitKey(0);
return 0;
}
```
在该代码示例中,我们首先读取了一个名为`lena.jpg`的图像。接下来,我们将其转换为灰度图像并反转像素值。然后,我们使用高斯模糊对反转的图像进行平滑处理。最后,我们将平滑后的图像与反转后的图像进行差异化处理,以创建浮雕效果。最后,我们将原始图像和浮雕图像显示在屏幕上,然后等待用户按下任意键以退出程序。
opencv图像二值化c++
以下是使用OpenCV和C++进行图像二值化的示例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat image = imread("image.jpg");
// 将图像转为灰度图
cvtColor(image, image, CV_BGR2GRAY);
// 应用自适应阈值二值化
Mat binary_image;
adaptiveThreshold(image, binary_image, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 11, 2);
// 显示二值化后的图像
imshow("Binary Image", binary_image);
waitKey(0);
return 0;
}
```
上述代码中,我们首先读取了一张图像,并将其转化为灰度图。然后,我们使用adaptiveThreshold()函数进行自适应阈值二值化,其中第三个参数255表示最大值,第四个参数ADAPTIVE_THRESH_GAUSSIAN_C表示使用高斯加权平均法,第五个参数THRESH_BINARY表示二值化类型,第六个参数11表示邻域大小,第七个参数2表示从加权平均值中减去的常量。最后,我们将二值化后的图像显示出来。
阅读全文