系列文章目录
数字图像处理:大约()章。
1.窗口,图像导入导出 :窗口图像导入等,基本操作
2.颜色域转换,控制条 :颜色,色域等控制条操作
3.图像运算处理 : (本文章)
4.大作业数字图像处理 :大作业-数字图像处理
5.标题 :(链接)
6.应用-基于QT的OPENCV的缩放:QT-OPENCV
...........
当前文章目录
一.理论部分
我这里主要讲操作:理论部分可参考: :数字图像处理--书本理论基础知识
做简单的作业实验,所需理论 :学校中以实验的---理论知识
参考一下,方便理解
二.图像运算处理操作
(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()
边缘提取的的函数大致函数操作
不同函数的差别,参数不同的差别
三.总结
在兴趣的基础上,搞点有意思的东西。
四.系列文章,其他模块可直接参考开头的链接目录