起因:身处大学身不由己,总有些社团活动需要拉外联啥的,一拉外联就的朋友圈发广告,还不能发私密。为了一劳永逸的解决这个问题,自己用pyhton写了一个类似于p图的代码。
目的:将一张朋友圈截图中的某一矩形区域替换为另一图片中的矩形区域。
原理:利用opencv给图片加上滑动条以及实现截取区域。
使用方法:在source窗口截取矩形区域,在material窗口点击会自动勾出等大矩形区域,按空格保存图片。
不足:滑动条部分,两张图片是共享的,现在懒得改了。。。。
代码:
#include<opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int h_x = 0, v_y = 0, d_x = 0, d_y = 0; //记录滑动条变化值,以及保存当前值
Rect v_bar, h_bar;
bool x_change = false;
bool y_change = false; //判断是否改变
bool drawbox = false;
int width, height;
Rect source_rect, _rectangle, product_rect;
int img_x=0, img_y=0; //记录滑动后截取图片在原图片中的位置
Rect roi_sour, roi_mater; //进行p图的部分
void on_mouse(int event, int x, int y, int flags, void* param);
void draw_scrolls(Mat src_img,Mat& tempimg, const char* title, int width = 1400, int height = 700);
void DrawRect(Mat& img, Rect box);
void on_mouse_2(int event, int x, int y, int flags, void* param);
void ROI_linearBlending(Mat srcImg_1, Mat srcImg_2);
int main()
{
const char* title = "source";
const char* title2 = "material";
Mat srcimg = imread("E:\\material\\pyq1.png");
Mat srcimg2 = imread("E:\\material\\pyq2.png");
Mat dstimg1,dstimg2;
Mat tempimg1,tempimg2;
namedWindow(title, 1);
namedWindow(title2, 1);
setMouseCallback(title, on_mouse);
setMouseCallback(title2, on_mouse_2);
while (true)
{
char c = waitKey(10);
draw_scrolls(srcimg, dst

为解决大学社团活动外联需求,作者自制Python代码,利用OpenCV实现朋友圈截图中特定区域的图片替换功能。通过滑动条调整,轻松选取并替换目标区域,实现一键广告更新。
最低0.47元/天 解锁文章
5179

被折叠的 条评论
为什么被折叠?



