拍照打开本地图库裁剪加上传

1,拍照打开本地图库裁剪先贴代码适配了4.0,5.0,6.0 和各种机型

//通用相册头像选择
    private   void showDialog() {
        View view = getLayoutInflater().inflate(R.layout.photo_choose_dialog,null);
        photos =(Button) view.findViewById(R.id.photo);
        gallery =(Button) view.findViewById(R.id.gallery);
        photocancle =(Button) view.findViewById(R.id.photocancle);
        photos.setOnClickListener(this);
        gallery.setOnClickListener(this);
        photocancle.setOnClickListener(this);
        view.getBackground().setAlpha(150);
        dialog = new Dialog(PersonalInfo.this, R.style.transparentFrameWindowStyle);
        dialog.setContentView(view, new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
        Window window = dialog.getWindow();
        // 设置显示动画
        window.setWindowAnimations(R.style.main_menu_animstyle);
        WindowManager.LayoutParams wl = window.getAttributes();
        wl.x = 0;
        wl.y = getWindowManager().getDefaultDisplay().getHeight();
        // 以下这两句是为了保证按钮可以水平满屏
        wl.width = Vie
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以加上图片裁剪功能。下面是修改后的代码,可以实现对原始图像进行投影法分割,并将分割后的子图像保存为单独的文件: ```python import cv2 import numpy as np # 读取原始图像 img = cv2.imread('test.png') # 转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化处理 ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV) # 求出横向和纵向的投影值 h, w = binary.shape[:2] h_proj = np.sum(binary, axis=1) w_proj = np.sum(binary, axis=0) # 绘制横向投影图 h_proj_img = np.zeros((h, w), dtype=np.uint8) for i in range(h): cv2.line(h_proj_img, (0, i), (int(h_proj[i] * w / h), i), 255, 1) # 绘制纵向投影图 w_proj_img = np.zeros((h, w), dtype=np.uint8) for i in range(w): cv2.line(w_proj_img, (i, h), (i, h - int(w_proj[i] * h / w)), 255, 1) # 分割图像 h_lines = cv2.findContours(h_proj_img.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] h_lines = sorted(h_lines, key=cv2.boundingRect) for i, contour in enumerate(h_lines): x, y, w, h = cv2.boundingRect(contour) if h > 10: roi = img[y:y + h, x:x + w] cv2.imwrite('roi_{}.png'.format(i), roi) # 显示结果 cv2.imshow('original', img) cv2.imshow('binary', binary) cv2.imshow('h_proj', h_proj_img) cv2.imshow('w_proj', w_proj_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这个示例代码中加入了分割图像的代码。首先,利用`cv2.findContours()`函数找到横向投影图中的连通区域,并按照从上到下的顺序进行排序;然后,遍历每个连通区域,如果高度大于10个像素,就将该区域对应的子图像裁剪出来,并保存为单独的文件。裁剪后的子图像文件名为`roi_{}.png`,其中`{}`表示子图像的编号。 需要注意的是,这个示例代码中的分割阈值是10像素,也就是说,连通区域高度小于10个像素的部分会被忽略。如果需要调整分割阈值,可以修改`h > 10`这一行的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值