opencv c++ 抠图另存
时间: 2024-01-24 10:15:31 浏览: 38
以下是使用OpenCV C++实现图像抠图并另存的示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main() {
// 读取原始图像
cv::Mat image = cv::imread("input.jpg");
// 创建一个与原始图像大小相同的掩膜图像
cv::Mat mask(image.size(), CV_8UC1, cv::Scalar(0));
// 在掩膜图像上绘制抠图区域,这里以矩形为例
cv::Rect roi(100, 100, 200, 200);
cv::rectangle(mask, roi, cv::Scalar(255), cv::FILLED);
// 将掩膜应用于原始图像,实现抠图
cv::Mat result;
image.copyTo(result, mask);
// 保存抠图结果
cv::imwrite("output.png", result);
return 0;
}
```
这段代码首先读取原始图像,然后创建一个与原始图像大小相同的掩膜图像。接下来,在掩膜图像上绘制抠图区域,这里以矩形为例。然后,将掩膜应用于原始图像,实现抠图。最后,将抠图结果保存为output.png。
相关问题
opencv c++ 抠图
以下是使用OpenCV C++进行图像分割和抠图的示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main() {
// 读取图像
cv::Mat image = cv::imread("image.jpg");
// 创建掩码图像
cv::Mat mask(image.size(), CV_8UC1, cv::Scalar(cv::GC_BGD));
// 定义矩形窗口
cv::Rect rectangle(50, 50, 200, 300);
// 使用GrabCut算法进行图像分割和抠图
cv::grabCut(image, mask, rectangle, cv::Mat(), cv::Mat(), 5, cv::GC_INIT_WITH_RECT);
// 将掩码图像中的前景和可能的前景设置为白色,背景和可能的背景设置为黑色
cv::compare(mask, cv::GC_PR_FGD, mask, cv::CMP_EQ);
cv::compare(mask, cv::GC_FGD, mask, cv::CMP_EQ);
// 创建输出图像
cv::Mat result;
image.copyTo(result, mask);
// 显示结果
cv::imshow("Result", result);
cv::waitKey(0);
return 0;
}
```
这段代码使用GrabCut算法对图像进行分割和抠图。首先,我们读取图像并创建一个与图像大小相同的掩码图像。然后,我们定义一个矩形窗口来指定要抠取的区域。接下来,我们使用`grabCut`函数对图像进行分割和抠图。最后,我们根据掩码图像将前景和可能的前景设置为白色,背景和可能的背景设置为黑色,并将结果复制到输出图像中。最后,我们显示结果图像。
opencv 绿幕抠图c++
以下是使用OpenCV进行绿幕抠图的C++代码示例:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读取图片
Mat image = imread("images/green_screen.jpg");
// 将图片BGR转化为HSV进行处理
Mat hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
// 计算图像绿值的范围,则除了图像人物以外,其他均为白色255,图像人物为黑色0
Mat mask;
inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
// 将图像进行取反操作,则图像人物为白色255,其他为黑色0
bitwise_not(mask, mask);
// 将原图和取反后的图在mask区域内进行与操作,则保留人物,其他为黑色,因此将人物抠出来了!
Mat result;
bitwise_and(image, image, result, mask);
// 显示结果
imshow("input", image);
imshow("mask", mask);
imshow("result", result);
waitKey(0);
destroyAllWindows();
return 0;
}
```