数字图像处理之(3)---图像运算处理(OPENCV-python)

 系列文章目录

      数字图像处理:大约()章。

1.窗口,图像导入导出                :窗口图像导入等,基本操作

 2.颜色域转换,控制条                :颜色,色域等控制条操作

3.图像运算处理                            : (本文章)

4.大作业数字图像处理                  :大作业-数字图像处理

5.标题                        :(链接)

6.应用-基于QT的OPENCV的缩放:QT-OPENCV

...........

当前文章目录

  • 前言
  • 一、图像运算处理的理论理论
  • 二、图像运算处理操作
    • 1.图像融合
    • 2.图像运算(加减)
    • 3.图像位运算逻辑运算
    • 4.尺寸变换(放缩)
    • 5.抠图以及计算面积(查找轮廓)(边缘检测,图像分割,特征提取)
  • 总结

一.理论部分

我这里主要讲操作:理论部分可参考:        :数字图像处理--书本理论基础知识

 做简单的作业实验,所需理论                     :学校中以实验的---理论知识        

参考一下,方便理解

二.图像运算处理操作

      (1)图像融合

代码和现象

#图像融合,做线性运算,new_img = img1* w1 + img2*w2 + bias(偏差)
import cv2
import numpy as np

cat = cv2.imread('./pic/moon.jpg')
iron = cv2.imread('./pic/sspu.png')

#剪切图片大小
#new_cat = cat[0:360, :400]

new_cat = cv2.resize(cat,(iron.shape[:-1][::-1]))
res = cv2.addWeighted(new_cat, 0.8, iron, 0.2, -10)
cv2.imshow('cat_iron', np.hstack((new_cat, iron,res)))

cv2.waitKey(0)
cv2.destroyAllWindows()

 

        (2)图像运算(加减--二值,进行加减)

#图像叠加

import cv2
import numpy as np

moon = cv2.imread('./pic/moon 1.jpg')
sspu = cv2.imread('./pic/sspu.png')

print(moon.shape)
print(sspu.shape)

#加法: add(要求两图片,长宽相同,通到相同),
#1--对应位置元素相加,超过255,就255,所以白色
#2--图片还可以和数字相加,超出,截断取余
#resize, 或者,ndarray切片
#new_img = cv2.resize(moon,(sspu.shape[:-1][::-1]))
new_moon = moon[0:640, :640]
print(new_moon.shape)
#new_moon += 350
#two = cv2.add(new_moon,sspu)

#减法
#two = cv2.subtract(new_moon,sspu)

#multipy,divide
#two = cv2.multipy(new_moon,sspu)
two = cv2.divide(new_moon,sspu)


cv2.imshow('two',two)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

        (3)逻辑运算(位运算)

import cv2
import numpy as np

moon = cv2.imread('./pic/moon 1.jpg')
sspu = cv2.imread('./pic/sspu.png')
new_moon = moon[0:640, :640]

#非255-moon
#moon_not = cv2.bitwise_not(moon)
#cv2.imshow('moon_not',np.hstack((new_moon, moon_not)))

#yu(对应元素的与操作)
#moon_and = cv2.bitwise_and(new_moon, sspu)
#cv2.imshow('moon_and',np.hstack((new_moon, moon_and)))

#or,  ,xor(异或)
moon_xor = cv2.bitwise_xor(new_moon, sspu)
cv2.imshow('moon_xor',np.hstack((new_moon, moon_xor)))


cv2.waitKey(0)
cv2.destroyAllWindows()

 

        (4)图像尺寸变换(等比例放大,等比例缩小)


import cv2
import numpy as np

moon = cv2.imread('./pic/moon 1.jpg')
sspu = cv2.imread('./pic/sspu.png')

#缩小
#new_moon = cv2.resize(moon, (640, 640))
#cv2.imshow('new_moon', new_moon)

#放大
#new_sspu = cv2.resize(sspu, (700, 700), interpolation = cv2.INTER_NEAREST)
#new_sspu2 = cv2.resize(sspu, (700, 700), interpolation = cv2.INTER_CUBIC)
#new_sspu3 = cv2.resize(sspu, (700, 700), interpolation = cv2.INTER_AREA)
#cv2.imshow('new_sspu', new_sspu)
#cv2.imshow('new_sspu1', new_sspu1)
#cv2.imshow('new_sspu2', new_sspu2)
#cv2.imshow('new_sspu3', new_sspu3)

#按照比例缩放
new_sspu = cv2.resize(sspu, dsize=None, fx=0.5, fy=0.5)
cv2.imshow('new_sspu3', new_sspu)

cv2.waitKey(0)
cv2.destroyAllWindows()

         (5)抠图(根据坐标-以及大小可以放缩)

 

import cv2
import numpy as np

sspu = cv2.imread('./pic/sspu.png')
moon = cv2.imread('./pic/moon.jpg')


#new_sspu3 = cv2.resize(moon, (170, 170))

rio = moon[0+120:180+130, 0+160:180+160]
cv2.imshow('rio',rio)

#cv2.imwrite('./pic/moon_cut.png',rio)
#cv2.imshow('new_sspu3', new_sspu3)

cv2.waitKey(0)
cv2.destroyAllWindows()

 (6)抠图计算面积

 

import cv2
import numpy as np
import matplotlib.pyplot as plt

moon_cut = cv2.imread("./pic/moon_cut.png")
moon_cut = cv2.medianBlur(moon_cut, 5)

moon_g = cv2.cvtColor(moon_cut,cv2.COLOR_BGR2GRAY)
ret,moon_b= cv2.threshold(moon_g,96,200,cv2.THRESH_BINARY_INV)
cv2.imshow('moon_b', moon_b)

#查找轮廓,绘制,计算面积
contours, hierarchy = cv2.findContours(moon_b,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
cir = cv2.drawContours(moon_cut, contours,1, (0, 0, 255), 2)
cv2.imshow('cir', cir)
area = cv2.contourArea(contours[1])
print ('area',area)


cv2.waitKey(0)
cv2.destroyAllWindows()

 边缘提取的的函数大致函数操作

 

 

 不同函数的差别,参数不同的差别

 

三.总结

在兴趣的基础上,搞点有意思的东西。

四.系列文章,其他模块可直接参考开头的链接目录

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值