numpy与opencv的图像处理

通过图像的特征运行opencv与numpy进行画图与图像的处理

本实例程序是处理图像的点坐标

import cv2 as cv
import numpy as np
import pandas as pd
import re
import datetime

def create_img(color=(255,255,255)):
    img = np.zeros([1024,1024,3],np.uint8)			#多通道
    img[:,:,:] = np.ones([1024,1024,3])*color
    # img[500,500,0] = 0
    cv.imwrite("new.png",img)
    return img



def datama(img):
    data = pd.read_csv("****************",sep="\s+",skiprows=82,names=["loc","bin","bool"])   
    # print(data)
    databool = data[(data['bool']==1)]
    # print(databool)
    databool_list = databool['loc'].tolist()
    # print(databool_list)
    for i in range(len(databool_list)):
        # print(re.findall(r"^[A-Za-z]+$",databool_list[i]))
        bool_list = re.split(r"X|Y",databool_list[i])
        # bool_list = bool_list.remove('')
        # bool_list = list(map(int, bool_list))
        x = int(bool_list[1])
        y = int(bool_list[2])
        if x > 0:
            x += 512
        elif x < 0:
            x -= 512
        else:
            x=512
        if y > 0:
            y += 512
        elif y < 0:
            y -= 512
        else:
            y=512
        img[x,y,:] = (0,0,0)
    cv.imwrite("ori.png",img)
    return img,data

def NGdata(img,color=(0,0,255)):
    data = pd.read_csv("****************",sep="\s+",skiprows=82,names=["loc","bin","bool"])   
    # print(data)
    databin = data[(data['bin']=='****************')|(data['bin']=='****************')]
    # databin.to_csv('binng.csv')
    databin_list = databin['loc'].tolist()
    # print(databin_list)
    for i in range(len(databin_list)):
        # print(re.findall(r"^[A-Za-z]+$",databin_list[i]))
        bool_list = re.split(r"X|Y",databin_list[i])
        # bool_list = bool_list.remove('')
        # bool_list = list(map(int, bool_list))
        x = int(bool_list[1])
        y = int(bool_list[2])
        if x > 0:
            x += 512
        elif x < 0:
            x -= 512
        else:
            x=512
        if y > 0:
            y += 512
        elif y < 0:
            y -= 512
        else:
            y=512
        img[x,y,:] = color
        # cv.circle(img, (x, y),1,(0,0,255)) 
    cv.imwrite("ng0.png",img)
    return img
    
def hough(img):
    # img = cv.imread('ng.png') 
    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY) 
    edges = cv.Canny(gray,50,150,apertureSize = 3)
    cv.imwrite('edge.png',edges)
    lines = cv.HoughLinesP(edges, 1, np.pi / 180, 30, minLineLength=40, maxLineGap=30)
    lines1 =lines[:, 0, :]# 提取为二维
    for x1, y1, x2, y2 in lines1[:]:
      cv.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
    
    #lsd=cv.createLineSegmentDetector(1)
    #lines=lsd.detect(img)[0]
    #drawn_img=lsd.drawSegments(img,lines)
    #cv.imwrite("./LSD.png",drawn_img )

    # _, binary = cv.threshold(gray, 175, 255, cv.THRESH_BINARY)
    # cv.imwrite('edge.png',binary)
    # minLineLength = 40
    # maxLineGap = 10 
    # lines = cv.HoughLinesP(edges,1,np.pi/180,10,minLineLength,maxLineGap) 
    # for x1,y1,x2,y2 in lines[0]: 
    #     cv.line(img,(x1,y1),(x2,y2),(255,0,255),2)
    # cv.imwrite('houghlines5.jpg',img)

    # lines = cv.HoughLines(edges,1,np.pi/180,70) 
    # print(lines)
    # # 1/0
    # # for rho,theta in lines[0]: 
    # for line in lines:
    #     rho = line[0][0]  #
    #     theta= line[0][1]
    #     print(rho,theta)
    #     if (theta < (np.pi/4. ))or(theta > (3.*np.pi/4.0)):          
    #         pt1 = (int(rho/np.cos(theta)),0)               #该直线与第一行的交点
    #         #该直线与最后一行的焦点
    #         pt2 = (int((rho-img.shape[0]*np.sin(theta))/np.cos(theta)),img.shape[0])
    #         cv.line( img, pt1, pt2, (255))             # 绘制一条白线
    #     else:                                                  #水平直线
    #         pt1 = (0,int(rho/np.sin(theta)))               # 该直线与第一列的交点
    #         #该直线与最后一列的交点
    #         pt2 = (img.shape[1], int((rho-img.shape[1]*np.cos(theta))/np.sin(theta)))
    #         cv.line(img, pt1, pt2, (255), 1)           # 绘制一条直线

        # a = np.cos(theta) 
        # b = np.sin(theta) 
        # x0 = a*rho 
        # y0 = b*rho 
        # x1 = int(x0 + 1000*(-b)) 
        # y1 = int(y0 + 1000*(a)) 
        # x2 = int(x0 - 1000*(-b)) 
        # y2 = int(y0 - 1000*(a))
    # cv.line(img,(x1,y1),(x2,y2),(255,0,255),2)
    cv.imwrite('houghlines.png',img)

    
        

def main():
    s = datetime.datetime.now()
    # img = create_img()
    # img,data = datama3(img)
    # img = NGdata(img,data)
    blackimg = create_img(color=(0,0,0))
    blackimg = NGdata(blackimg,color=(255,255,255))
    hough(blackimg)
    e = datetime.datetime.now()
    print((e-s))







if __name__  == "__main__":
    main()
    # hough()
   

本示例做了形态学处理

import cv2 as cv
import numpy as np
import pandas as pd
import re
import datetime

def create_img(color=(0)):
    img = np.zeros([2048,2048,1],np.uint8)		#单通道
    img[:,:,0] = np.ones([2048,2048])*color
    # img[500,500,0] = 0
    cv.imwrite("./pic/new.png",img)
    return img



def dataori(img):
    data = pd.read_csv("*********************",encoding='ANSI')  
    # print(data)
    datax = data['X'].to_list()
    print('datax',len(datax))
    # print(datax)
    # 1/0
    datay = data['Y'].to_list()
    print('datay',len(datay))
    # print(databool_list)
    for i in range(len(datax)):
        # print(re.findall(r"^[A-Za-z]+$",databool_list[i]))
        # bool_list = re.split(r"X|Y",databool_list[i])
        # bool_list = bool_list.remove('')
        # bool_list = list(map(int, bool_list))
        x = int(datax[i])
        y = int(datay[i])
        if x > 0:
            x += 1024
        elif x < 0:
            x -= 1024
        else:
            x=1024
        if y > 0:
            y += 1024
        elif y < 0:
            y -= 1024
        else:
            y=1024
        img[x,y,0] = 255
    cv.imwrite("./pic/ori1mm.png",img)
    return img,data
   
def picsolve(img,data):
    # gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    gray = cv.blur(img,(3,3))
    _,binary = cv.threshold(gray,127,255,cv.THRESH_BINARY)
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
    binary = cv.morphologyEx(binary, cv.MORPH_CLOSE, kernel)
    for i in range(10):
        binary = cv.dilate(binary, None, iterations=2)
        binary = cv.erode(binary,None,iterations=3)
    binary_x = list(np.where(binary==255)[0])
    binary_x = binary_x - np.ones([len(binary_x)])*1024
    # binary = binary.T
    binary_y = list(np.where(binary==255)[1])
    binary_y = binary_y - np.ones([len(binary_y)])*1024
    print(binary_x)
    print(binary_y)
    print(len(np.where(binary==255)[0]))
    print(len(np.where(binary==255)[1]))
    df = pd.DataFrame({'X':binary_x,'Y':binary_y})
    print(df)
    df.to_csv("./pic/306C-6f.csv", index=False,encoding="ANSI")
    result = pd.merge(df, data, how='inner', on=['X', 'Y'])
    print(result)
    result.to_csv("**********", index=False,encoding="ANSI")
    cv.imwrite("./pic/binary.png",binary)
    
def main():
    s = datetime.datetime.now()
    img = create_img()
    img,data = dataori(img)
    picsolve(img,data)

    e = datetime.datetime.now()
    print((e-s))







if __name__  == "__main__":
    main()
    # hough()
   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值