基于opencv实现的化学键线式识别:数据结构,函数与算法的碰撞

本文介绍了基于opencv的化学键线式识别项目,旨在简化有机化学中数碳数氢的过程。通过并查集解决opencv识别不精确导致的线头问题,目标是实现化学式的邻接表存储及反应预测。
摘要由CSDN通过智能技术生成

数据结构,函数与算法的碰撞

1.项目前言

都说二十一世纪四大天坑,生化环材。其中最引人瞩目的无疑是化学和生物毕竟就这俩学科中学教。而处在化学和生物这两个理科生的痛点的交集之处,便是大名鼎鼎的有机化学。在化学界,他是守在通往大神道路上的一道关卡;在生物界,他是阻碍题干说人话的痛点。有机化学的键线式常常看的人脑袋大,数碳数氢数往往要很长时间。
所以有没有什么办法缓解这一点呢?
本文作者作为一名退役的oier加现役化竞人,自然想要通过一些现有的知识来为学科出一份力,于是,这个项目应运而生。

2.项目介绍

今年1月,我发布了一款程序,作为对于化学式识别的浅尝。
这个项目,主要目的其实有些醉翁之意不在酒的意思。所谓的化学式识别,便是借着“结构简式”这样一套图像规则摸清opencv的运算规则,进而更好地引出实现识别具有一定规则花纹的方法,车道线算是其中基本的一例。

3.主程序讲解

import cv2 as cv
from PIL import Image, ImageFilter
import PIL.ImageOps
import numpy as np
from math import gcd, sqrt, ceil, floor
# from huaxue1215 import zhuaqu
from matplotlib import pyplot as plt
#定义区
path = "D:/121.png"
Prep = cv.imread(path, 0)
X, Y = Prep.shape[0:2]
Near = [[0] * 10] * 10 #邻接表
Points = [] #每个点的坐标,dot格式
Ts = 0

接下来,在程序里加入并查集实现:

class bingchaji:
    parent = {
   }
    def __init__(self, n):
        for i in range(n):
            self.parent[i] = i
    def find(self, k):
        if k == self.parent[k]:
            return k
        return self.find(self.parent[k])
    def equal(self, a, b):
        return self.find(a) == self.find(b)
    def merge(self, U, D):
        if self.equal(U, D):
            return
        self.parent[self.find(U)] = self.find(D)

    def count(self, n):
        cnt = 0
        Q = []
        for i in range(n):
            if self.parent[i] == i:
                cq = 0
                for j in range(n):
                    if self.find(j) == i:
                        cq += 1
                Q.append((i, cq))
        return Q
    def Prt(self, n
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值