// MFCApplication1Dlg.cpp: 实现文件
//
#include "pch.h"
#include "framework.h"
#include "MFCApplication1.h"
#include "MFCApplication1Dlg.h"
#include "afxdialogex.h"
#include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/core/core.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include <opencv2/face.hpp>
#include <opencv2/xfeatures2d.hpp>
#include "opencv2/opencv.hpp"
#include <math.h>
#include<direct.h>
#include<io.h>
#include<sstream>
#include "string"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
using namespace std;
using namespace cv;
using namespace cv::face;
using namespace cv::xfeatures2d;
CFont font, font1;
char c;
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CMFCApplication1Dlg 对话框
CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MFCAPPLICATION1_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication1Dlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON6, &CMFCApplication1Dlg::OnBnClickedButton6)
END_MESSAGE_MAP()
// CMFCApplication1Dlg 消息处理程序
BOOL CMFCApplication1Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
ShowWindow(SW_MAXIMIZE);
ShowWindow(SW_MINIMIZE);
// TODO: 在此添加额外的初始化代码
//CFont font;
font.CreatePointFont(200, _T("宋体"), NULL);
font1.CreatePointFont(150, _T("宋体"), NULL);
GetDlgItem(IDC_BUTTON1)->SetFont(&font);
GetDlgItem(IDC_BUTTON6)->SetFont(&font);
GetDlgItem(IDC_STATIC12)->SetFont(&font1);
GetDlgItem(IDC_STATIC13)->SetFont(&font1);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CMFCApplication1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CMFCApplication1Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
CWinThread* pWinThread_CompositeVideo;//创建线程
string convertToString(double d) {
ostringstream os;
if (os << d)
return os.str();
return "invalid conversion";
}
UINT CMFCApplication1Dlg::CompositeVideo(LPVOID pParam)//**************************************************************合成视频线程函数******************************************************************************************
{
CMFCApplication1Dlg * dlgR = (CMFCApplication1Dlg *)pParam;
// TODO: 在此添加控件通知处理程序代码
//绿幕抠图
VideoWriter writer;
//writer.open("./my1.AVI", writer.fourcc('M', 'J', 'P', 'G'), 10, Size(1366,768), true);//CAP_OPENCV_MJPEG
writer.open("./my1.flv", writer.fourcc('F', 'L', 'V', '1'), 30, Size(1366, 768), true);//CAP_OPENCV_MJPEG
Mat background_01 = imread("D:/OpenCV_program/绿幕抠图/1.jpg");
Mat background_02 = imread("D:/OpenCV_program/绿幕抠图/2.jpg");
Mat background_03 = imread("D:/OpenCV_program/绿幕抠图/3.jpg");
Mat background_04 = imread("D:/OpenCV_program/绿幕抠图/4.jpg");
Mat background = background_01;
int width = background.cols;
int height = background.rows;
VideoCapture capture, capture_TV;
capture.open("./胆小的猫.flv");
capture_TV.open("./跳舞.mp4");
if ((!capture.isOpened()) || (!capture_TV.isOpened()))
{
return -1;
}
Mat frame, hsv, green_mask, green_mask_bin, mask, result;
Mat k, k0;
int m = 0;
int h, w, dims;
int r = 0, g = 0, b = 0;
int r1 = 0, g1 = 0, b1 = 0;
int r2 = 0, g2 = 0, b2 = 0;
double wt = 0;
vector<Vec4i> hierarchy;
vector<vector<Point> > contours;
while (capture.read(frame))
{
mask = Mat::zeros(frame.size(), CV_8UC1);
result = Mat::zeros(frame.size(), frame.type());
//寻找绿幕
cvtColor(frame, hsv, COLOR_BGR2HSV);
inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), green_mask);//大范围的绿色
//inRange(hsv, Scalar(50, 200, 200), Scalar(70, 255, 255), green_mask);//本素材的绿色
//imshow("green_mask", green_mask);
// 开操作
//k0 = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));
//morphologyEx(green_mask, green_mask, MORPH_OPEN, k0);
// 闭操作,去掉mask杂点
//k = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
//morphologyEx(green_mask, green_mask, MORPH_CLOSE, k);
//mask二值化
threshold(green_mask, green_mask_bin, 200, 255, THRESH_BINARY);
//寻找轮廓
findContours(green_mask_bin, contours, hierarchy, RETR_TREE, CHAIN_APPROX_NONE, Point(0, 0));
//筛选剔除掉面积小于290000或大于320000的轮廓
vector <vector<Point>>::iterator iter = contours.begin();
for (; iter != contours.end();)
{
double g_dConArea = contourArea(*iter);
if (g_dConArea < 290000 || g_dConArea > 320000)
{
iter = contours.erase(iter);
}
else
{
++iter;
}
}
if (contours.size() == 0)
{
frame.copyTo(result);
imshow("ImageShow2", frame);
imshow("ImageShow", result);
writer.write(result);
}
else
{
capture_TV.read(background);
drawContours(mask, contours, -1, Scalar(255), CV_FILLED);
for (int i = 0; i < (int)contours.size(); i++)
{
Rect rect1 = boundingRect(Mat(contours[i]));//最小外接矩
resize(background, background, rect1.size());//调整图像大小
//融合
h = frame.rows;
w = frame.cols;
//int bg_row = 0;
//dims = frame.channels();
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
MFCApplication1 - 副本.rar (84个子文件)
MFCApplication1 - 副本
MFCApplication1
MFCApplication1.h 530B
MFCApplication1.vcxproj 13KB
MFCApplication1.cpp 3KB
胆小的猫.flv 12.27MB
res
MFCApplication1.rc2 686B
MFCApplication1.ico 66KB
跳舞.mp4 10.58MB
MFCApplication1.vcxproj.user 238B
MFCApplication1Dlg.cpp 11KB
my1.flv 696KB
MFCApplication1.rc 11KB
framework.h 2KB
Debug
MFCApplication1.log 3KB
MFCApplication1.pch 54.13MB
MFCApplication1.res 68KB
vc141.pdb 8.26MB
vc141.idb 1.53MB
MFCApplication1.tlog
MFCApplication1.lastbuildstate 251B
link-rc.write.1.tlog 2B
CL.write.1.tlog 3KB
link-cvtres.write.1.tlog 2B
rc.command.1.tlog 582B
link.command.1.tlog 2B
CL.read.1.tlog 129KB
link-mt.write.1.tlog 2B
link-cvtres.read.1.tlog 2B
CL.command.1.tlog 4KB
rc.read.1.tlog 3KB
link-mt.read.1.tlog 2B
unsuccessfulbuild 0B
link-rc.read.1.tlog 2B
link.write.1.tlog 2B
rc.write.1.tlog 386B
link.read.1.tlog 2B
MFCApplication1.Build.CppClean.log 3KB
MFCApplication1Dlg.obj 372KB
MFCApplication1.obj 75KB
pch.obj 986KB
MFCApplication1Dlg.h 808B
resource.h 2KB
pch.cpp 158B
MFCApplication1.vcxproj.filters 2KB
targetver.h 299B
resource.hm 354B
pch.h 544B
x64
Debug
MFCApplication1.log 2KB
MFCApplication1.pch 54.69MB
MFCApplication1.res 68KB
vc141.pdb 8.45MB
vc141.idb 1.55MB
MFCApplication1.tlog
MFCApplication1.lastbuildstate 229B
CL.write.1.tlog 2KB
rc.command.1.tlog 504B
link.command.1.tlog 4KB
CL.read.1.tlog 130KB
CL.command.1.tlog 5KB
rc.read.1.tlog 3KB
link.write.1.tlog 1KB
rc.write.1.tlog 346B
link.read.1.tlog 13KB
MFCApplication1.Build.CppClean.log 5KB
MFCApplication1Dlg.obj 1.12MB
MFCApplication1.obj 100KB
pch.obj 1.03MB
MFCApplication1.aps 108KB
MFCApplication1.sln 1KB
程序说明.docx 12KB
.vs
MFCApplication1
v15
ipch
2cf29dcf988662bf.ipch 134.06MB
9b240aa9ff3e05a9.ipch 134.06MB
4d0b88484ec4175a.ipch 134.06MB
3887db8b6cad4dd8.ipch 134.06MB
641f6166e26f0d49.ipch 134.06MB
83f76c939fcb53f8.ipch 115.69MB
67f27599218479e8.ipch 134.06MB
7159857b7635ee0e.ipch 134.06MB
AutoPCH
c6efa8c7cda630dd.ipch 133.88MB
6055400fbed4ee3e.ipch 134.06MB
5fce5fd363eced6f.ipch 134.06MB
.suo 108KB
Browse.VC.db 83.08MB
Debug
MFCApplication1.pdb 60KB
x64
Debug
MFCApplication1.pdb 2.97MB
MFCApplication1.ilk 2.34MB
MFCApplication1.exe 427KB
共 84 条
- 1
老中医@
- 粉丝: 25
- 资源: 6
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于jsp+mysql的JSP九宫格日记本源码.zip
- 基于jsp+mysql的JSP会员卡积分管理系统源码.zip
- 仿小米商城微信小程序源码+项目说明.zip
- 基于jsp+mysql的JSP个人日记本源码.zip
- 南溪CN No1 fps网络断网工具.zip
- 基于jsp+mysql的JSP宠物商城源码.zip
- C++开发基于Qt的音乐播放器的设计与实现项目源码+项目使用说明(毕业设计).zip
- 基于jsp+mysql+servlet的JSP图书馆图书管理系统源码.zip
- C++开发基于Qt的音乐播放器的设计与实现项目源码+项目使用说明(毕业设计).zip
- 【2024win11软件启动速度反应慢解决方法附工具】
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页