{"id":2041,"date":"2018-12-04T19:45:21","date_gmt":"2018-12-04T11:45:21","guid":{"rendered":"https:\/\/yanjingang.com\/blog\/?p=2041"},"modified":"2018-12-17T17:16:12","modified_gmt":"2018-12-17T09:16:12","slug":"%e5%a6%82%e4%bd%95%e4%bb%8e%e6%b1%bd%e8%bd%a6%e7%85%a7%e7%89%87%e4%b8%ad%e6%89%a3%e5%87%ba%e8%bd%a6%e7%89%8c%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/yanjingang.com\/blog\/?p=2041","title":{"rendered":"\u5982\u4f55\u4ece\u6c7d\u8f66\u7167\u7247\u4e2d\u6263\u51fa\u8f66\u724c\uff1f"},"content":{"rendered":"<p>\u4e3a\u4e86\u505a\u8f66\u724c\u8bc6\u522b\u8bad\u7ec3\uff0c\u5148\u5355\u72ec\u7814\u7a76\u4e0b\u600e\u4e48\u4ece\u7167\u7247\u91cc\u6263\u51fa\u8f66\u724c\u533a\u57df\u3002<\/p>\n<p>\u5927\u6982\u601d\u8def\uff1a\u8f6c\u5316\u6210\u7070\u5ea6\u56fe\u3001\u4f7f\u7528\u9ad8\u65af\u5e73\u6ed1\u3001\u4e2d\u503c\u6ee4\u6ce2\u3001Sobel\u8fb9\u7f18\u5316\u68c0\u6d4b\u3001\u81a8\u80c0\u8f6e\u5ed3\u3001\u8150\u8680\u7ec6\u8282\u3001\u8f6e\u5ed3\u7b5b\u9009\u3001\u4fdd\u5b58\u8f6e\u5ed3\u533a\u57df\u539f\u56fe\u3002<code class=\"\"><\/code><\/p>\n<p>\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\">vim cut_platenumber.py \n#!\/usr\/bin\/env python\n# coding=utf-8\n# \u4ece\u4e0b\u8f7d\u7684\u56fe\u7247\u91cc\u6263\u51fa\u8f66\u724c\u533a\u57df\n# sh clear.sh &amp;&amp; python cut_platenumber.py &gt;log\/cut_platenumber.log\nimport uuid\nimport os\nimport copy\nimport cv2\nimport numpy as np\nimport random\n\nclass CutPlateNumber:\n    \"\"\"\u4ece\u4e0b\u8f7d\u7684\u56fe\u7247\u91cc\u6263\u51fa\u8f66\u724c\u533a\u57df\"\"\"\n\n    def preprocess(self, gray, name=''):\n\t\"\"\"\u5f62\u6001\u5b66\u53d8\u6362\u7684\u9884\u5904\u7406\"\"\"\n\tprint '__preprocess__'\n        # \u9ad8\u65af\u5e73\u6ed1\n        gaussian = cv2.GaussianBlur(gray, (3, 3), 0, 0, cv2.BORDER_DEFAULT)\n\tself.write_image(gaussian, name, 'gaussion')\n        # \u4e2d\u503c\u6ee4\u6ce2\n        median = cv2.medianBlur(gaussian, 5)\n\tself.write_image(median, name, 'median')\n        # Sobel\u7b97\u5b50\uff0cX\u65b9\u5411\u6c42\u68af\u5ea6,\u5bf9\u56fe\u50cf\u8fdb\u884c\u8fb9\u7f18\u68c0\u6d4b\n        #sobel = cv2.Sobel(median, cv2.CV_8U, 1, 0, ksize=3)\n        sobel = cv2.Sobel(median, cv2.CV_16S, 1, 0, ksize=3)\n\tsobel = cv2.convertScaleAbs(sobel)\n        # \u4e8c\u503c\u5316\n        ret, binary = cv2.threshold(sobel, 170, 255, cv2.THRESH_BINARY)\n\tself.write_image(binary, name, 'threshold')\n        # \u81a8\u80c0\u548c\u8150\u8680\u64cd\u4f5c\u7684\u6838\u51fd\u6570\n        element1 = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 1))\n        element2 = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 7))\n        # \u81a8\u80c0\u4e00\u6b21\uff0c\u8ba9\u8f6e\u5ed3\u7a81\u51fa\n        dilation = cv2.dilate(binary, element2, iterations=1)\n\tself.write_image(dilation, name, 'dilation')\n        # \u8150\u8680\u4e00\u6b21\uff0c\u53bb\u6389\u7ec6\u8282\n        erosion = cv2.erode(dilation, element1, iterations=1)\n\tself.write_image(erosion, name, 'erosion')\n        # \u518d\u6b21\u81a8\u80c0\uff0c\u8ba9\u8f6e\u5ed3\u660e\u663e\u4e00\u4e9b\n        dilation2 = cv2.dilate(erosion, element2, iterations=2) #iterations\u8bbe\u7f6e\u592a\u5927\u4f46\u8f66\u724c\u533a\u57df\u5f88\u5c0f\u65f6\u975e\u8f66\u724c\u533a\u57df\u5bb9\u6613\u8fb9\u7f18\u8fde\u7247\u8fc7\u5ea6\uff0c\u8bbe\u7f6e\u592a\u5c0f\u4f46\u8f66\u724c\u5360\u6bd4\u8fc7\u5927\u65f6\u5bb9\u6613\u7701\u7b80\u79f0\u548c\u540e\u8fb9\u8fde\u4e0d\u4e0a\n\tself.write_image(dilation2, name, 'dilation2')\n        return dilation2\n\n\n    def find_region(self, img, imagePath='', name=''):\n        \"\"\"\u67e5\u627e\u8f66\u724c\u6240\u5728\u533a\u57df\"\"\"\n\tprint '__find_region__'\n        # \u67e5\u627e\u8f6e\u5ed3\n        binary, contours, hierarchy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)\n\n        # \u8f6e\u5ed3\u7b5b\u9009\n        region = {}\n\tstandard_w_h_retio = 45\/15 #\u6807\u51c6\u8f66\u724c\u5bbd45cm\/\u9ad815cm=3\n\tstandard_full_retio = 0.2 #\u5e38\u89c1\u8f66\u724c\u5360\u56fe\u7247\u5927\u5c0f\n\tmin_ratio_diff = 99 #\u4e0e\u6807\u51c6\u8f66\u724c\u957f\u5bbd\u6bd4\u5dee\u5f02\u6700\u5c0f\u7684\u503c*\u5728\u56fe\u50cf\u4e2d\u7684\u5360\u6bd4\u5927\u5c0f\n\timg_regins = cv2.imread(imagePath)  #\u6240\u6709\u8f6e\u5ed3\u53e0\u52a0\u5bf9\u8c61\n        for i in range(len(contours)):\n            cnt = contours[i]\n            # \u8ba1\u7b97\u8be5\u8f6e\u5ed3\u7684\u9762\u79ef\n            area = cv2.contourArea(cnt)\n            # \u9762\u79ef\u5c0f\u7684\u90fd\u7b5b\u9009\u6389\n            if (area &lt; 2000):\n                continue\n\n            # \u627e\u5230\u6700\u5c0f\u7684\u77e9\u5f62\uff0c\u8be5\u77e9\u5f62\u53ef\u80fd\u6709\u65b9\u5411\n            rect = cv2.minAreaRect(cnt)\n\n            # box\u662f\u56db\u4e2a\u70b9\u7684\u5750\u6807\n            box = cv2.cv2.boxPoints(rect)\n            box = np.int0(box)\n\t    #print box\n\n\t    # \u4e0d\u89c4\u5219\u5f62\u72b6\u8f6c\u77e9\u5f62\uff08\u53d6\u5de6\u4e0a\u89d2\u6700\u5c0f\u548c\u53f3\u4e0b\u89d2\u6700\u5927\u5750\u6807\uff09\n\t    xs = [box[0, 0], box[1, 0], box[2, 0], box[3, 0]]\n            ys = [box[0, 1], box[1, 1], box[2, 1], box[3, 1]]\n            xs_sorted_index = np.argsort(xs)\n            ys_sorted_index = np.argsort(ys)\n\t    #print xs,xs_sorted_index\n\t    #print ys,ys_sorted_index\n\n            x1 = box[xs_sorted_index[0], 0] - 20 #\u5de6\u4fa7\u7701\u7b80\u79f0\u90e8\u5206\u8fb9\u7f18\u68c0\u6d4b\u6548\u679c\u4e0d\u592a\u597d\uff0c\u8f6e\u5ed3\u5f80\u5de6\u591a\u53d6\u4e00\u70b9\n            y1 = box[ys_sorted_index[0], 1]\n            x2 = box[xs_sorted_index[3], 0]\n            y2 = box[ys_sorted_index[3], 1]\n\t    if x1 &lt; 1: x1 = 1\n\t    if y1 &lt; 1: y1 = 1\n\n            # \u8ba1\u7b97\u77e9\u5f62\u5bbd\u9ad8\u6bd4\n            width = abs(x2 - x1)\n            height = abs(y2 - y1)\n            wh_ratio = float(width) \/ float(height)\n\t    #\u8ba1\u7b97\u77e9\u5f62\u5728\u5927\u56fe\u4e2d\u7684\u50cf\u7d20\u5360\u6bd4\n\t    full_ratio = float(width*height) \/ float(img.shape[0] * img.shape[1])\n            #\u8ba1\u7b97\u77e9\u5f62\u5728\u56fe\u50cf\u4e2d\u7684\u4e0a\u4e0b\u4f4d\u7f6e\u4e0e\u56fe\u7247\u5927\u5c0f\u7684\u5339\u914d\u5408\u7406\u6027\uff08\u503c\u8d8a\u5c0f\u8868\u793a\u8d8a\u5408\u7406\uff09\n\t    postion_right_ratio_y = abs(0.5 - float(y2-height\/2)\/img.shape[1]) * abs(full_ratio - standard_full_retio)  #\u4e0a\u4e0b\u4f4d\u7f6e\u4e0e\u56fe\u7247\u5927\u5c0f\u5408\u7406\u6027\n\t    postion_right_ratio_x = abs(0.5 - float(x2-height\/2)\/img.shape[0]) * abs(full_ratio - standard_full_retio)  #\u5de6\u53f3\u4f4d\u7f6e\u4e0e\u56fe\u7247\u5927\u5c0f\u5408\u7406\u6027\n\t    #postion_right_ratio = (postion_right_ratio_y**2*600 + postion_right_ratio_x**2*400)\/2 #\u653e\u5927\u5408\u7406\u6027\u7684\u5dee\u503c\uff0c\u4e0a\u4e0b\u6743\u91cd\u9ad8\u4e9b \n\t    postion_right_ratio = (postion_right_ratio_y*0.6 + postion_right_ratio_x*0.4)\/2 #\u653e\u5927\u5408\u7406\u6027\u7684\u5dee\u503c\uff0c\u4e0a\u4e0b\u6743\u91cd\u9ad8\u4e9b \n            #\u590d\u5408\u6743\u91cd\u6bd4(\u9ad8\u5bbd\u6bd4\u4e0e\u6807\u51c6\u7684\u5dee\u503c\u3001\u56fe\u50cf\u4f4d\u7f6e\u4e0e\u56fe\u50cf\u5927\u5c0f\u7684\u5408\u7406\u6027)\n\t    ratio = abs(wh_ratio - standard_w_h_retio)*0.03 + postion_right_ratio * 0.97\n\t    print abs(wh_ratio - standard_w_h_retio),postion_right_ratio\n\n\t    #\u5bbd\u9ad8\u6bd4\u53ca\u62cd\u7167\u6846\u5360\u6bd4\u8fc7\u6ee4\n\t    print i,area,'['+str(x1)+','+str(y1)+' '+str(x2)+','+str(y2)+']',round(wh_ratio,2),round(full_ratio,3),round(postion_right_ratio_x,2),round(postion_right_ratio_y,2),round(postion_right_ratio,2),round(ratio,4)\n            if (wh_ratio &lt; standard_w_h_retio - 1.2 or wh_ratio &gt; standard_w_h_retio + 2) or (full_ratio &lt; 0.015 or full_ratio &gt; 0.5):    #\u9ad8\u5bbd\u6bd4&gt;2.3 &amp;&amp; &lt;5; \u62cd\u7167\u6846\u5728\u6574\u56fe\u4e2d\u7684\u5360\u6bd4\u5e94&gt;5% &amp;&amp; &lt;50%\n                continue\n\n\t    # \u77e9\u5f62\u8f6e\u5ed3\u6807\u8bb0\u56fe\n\t    img_regin = cv2.imread(imagePath)\n\t    cv2.rectangle(img_regin, (x1, y1), (x2, y2), (0, 255, 0), 2)  #\u5355\u8f6e\u5ed3\n\t    cv2.rectangle(img_regins, (x1, y1), (x2, y2), (0, 255, 0), 2) #\u8f6e\u5ed3\u53e0\u52a0\n\t    cv2.putText(img_regins, str(i)+' '+str(round(ratio,4)), (x1+3, y1+15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 1) #\u8f6e\u5ed3\u53e0\u52a0\u56fe\u4e0a\u6807\u8bb0\u8f6e\u5ed3\u5e8f\u53f7\n\t    self.write_image(img_regin, name, 'regin'+str(i))\n\t    if ratio &lt; min_ratio_diff: #\u4fdd\u5b58\u590d\u5408\u6743\u91cd\u6700\u5408\u7406\u7684\u90a3\u4e2a\u8f6e\u5ed3\n\t\tmin_ratio_diff = ratio\n\t        region = {'x1':x1,'x2':x2,'y1':y1,'y2':y2}\n\n\tself.write_image(img_regins, name, 'regin')  #\u8f6e\u5ed3\u53e0\u52a0\u56fe\u50cf\u4fdd\u5b58\n        return region\n\n    def write_image(self, img, name, step='', path='tmp'):\n\t\"\"\"\u4fdd\u5b58\u56fe\u7247\u5e76\u6253\u5370\"\"\"\n\tif False:\n\t    return\n\tif step != '':\n\t    img_file = '.\/data\/'+path+'\/'+name.split('.')[0]+'.'+step+'.'+name.split('.')[1]\n\telse:\n\t    img_file = '.\/data\/'+path+'\/'+name\n\tcv2.imwrite(img_file, img)\n\tprint img_file\n\n    def start(self, imagePath, name):\n\t\"\"\"\u5f00\u59cb\u88c1\u526a\"\"\"\n\tprint \"START\\t\" + imagePath\n        # \u8bfb\u53d6\u56fe\u7247\n        img = cv2.imread(imagePath)\n        # \u8f6c\u5316\u6210\u7070\u5ea6\u56fe\n        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n\tself.write_image(gray, name, 'gray')\n        # \u5f62\u6001\u5b66\u53d8\u6362\u7684\u9884\u5904\u7406\n        dilation = self.preprocess(gray, name)\n        # \u67e5\u627e\u8f66\u724c\u533a\u57df\n        region = self.find_region(dilation, imagePath, name)\n\tprint region\n        if len(region) &gt; 0:  #\u8f66\u724c\u8f6e\u5ed3\u67e5\u627e\u6210\u529f\n\t    # \u4ece\u7070\u5ea6\u56fe\u4e2d\u6263\u53d6\u8f6e\u5ed3\u77e9\u5f62\u5e76\u7f29\u653e\n            img_plate = cv2.resize(gray[region['y1']:region['y2'], region['x1']:region['x2']] ,(180, 60))\n\t    # \u4fdd\u5b58\u8f66\u724c\u533a\u57df\u62a0\u56fe\u7ed3\u679c\n\t    save_path = 'images_train'\n\t    if random.random() &lt; 0.1:  #10%\u653e\u5230\u6d4b\u8bd5\u96c6\n\t        save_path = 'images_test'\n\t    self.write_image(img_plate, name, path=save_path)\n\t    print \"FOUND PLATE NUMBER!\\t\" + name\n\nif __name__ == '__main__':\n    img_path = '.\/data\/download_rename\/'\n    cutPlateNumber = CutPlateNumber()\n    # \u83b7\u53d6\u539f\u56fe\u5217\u8868\n    imgs = os.listdir(img_path)\n    for img in imgs:\n\t#img = '\u8fbdB48599.jpg'\n        cutPlateNumber.start(img_path + img, img)\n\t#break<\/code><\/pre>\n<p><code class=\"\"><\/code><\/p>\n<p>\u5355\u6d4b\u7ed3\u679c\uff1a<\/p>\n<p><code class=\"\"><\/code><\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/?attachment_id=2059\" rel=\"attachment wp-att-2059\"><img loading=\"lazy\" class=\"alignnone wp-image-2059 size-medium\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/process-250x300.png\" alt=\"\" width=\"250\" height=\"300\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/process-250x300.png 250w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/process-624x748.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/process.png 636w\" sizes=\"(max-width: 250px) 100vw, 250px\" \/><\/a><\/p>\n<p>\u5404\u6b65\u9aa4\u6548\u679c\u56fe\uff1a<\/p>\n<p>\u539f\u56fe\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/?attachment_id=2042\" rel=\"attachment wp-att-2042\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-2042\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/\u95fdJ12345.jpg\" alt=\"\" width=\"800\" height=\"548\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/\u95fdJ12345.jpg 800w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/\u95fdJ12345-300x206.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/\u95fdJ12345-768x526.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/\u95fdJ12345-624x427.jpg 624w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>\u7070\u5ea6\u56fe\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/?attachment_id=2047\" rel=\"attachment wp-att-2047\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-2047\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/gray.\u95fdJ12345.jpg\" alt=\"\" width=\"800\" height=\"548\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/gray.\u95fdJ12345.jpg 800w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/gray.\u95fdJ12345-300x206.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/gray.\u95fdJ12345-768x526.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/gray.\u95fdJ12345-624x427.jpg 624w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>\u9ad8\u65af\u5e73\u6ed1\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/?attachment_id=2046\" rel=\"attachment wp-att-2046\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-2046\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/gaussion.\u95fdJ12345.jpg\" alt=\"\" width=\"800\" height=\"548\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/gaussion.\u95fdJ12345.jpg 800w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/gaussion.\u95fdJ12345-300x206.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/gaussion.\u95fdJ12345-768x526.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/gaussion.\u95fdJ12345-624x427.jpg 624w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>\u4e2d\u503c\u6ee4\u6ce2\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/?attachment_id=2048\" rel=\"attachment wp-att-2048\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-2048\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/median.\u95fdJ12345.jpg\" alt=\"\" width=\"800\" height=\"548\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/median.\u95fdJ12345.jpg 800w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/median.\u95fdJ12345-300x206.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/median.\u95fdJ12345-768x526.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/median.\u95fdJ12345-624x427.jpg 624w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>sobel\u8fb9\u7f18\u68c0\u6d4b+\u4e8c\u503c\u5316\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/?attachment_id=2049\" rel=\"attachment wp-att-2049\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-2049\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/threshold.\u95fdJ12345.jpg\" alt=\"\" width=\"800\" height=\"548\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/threshold.\u95fdJ12345.jpg 800w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/threshold.\u95fdJ12345-300x206.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/threshold.\u95fdJ12345-768x526.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/threshold.\u95fdJ12345-624x427.jpg 624w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>\u8f6e\u5ed3\u81a8\u80c0\u4e00\u6b21\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/?attachment_id=2043\" rel=\"attachment wp-att-2043\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-2043\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/dilation.\u95fdJ12345.jpg\" alt=\"\" width=\"800\" height=\"548\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/dilation.\u95fdJ12345.jpg 800w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/dilation.\u95fdJ12345-300x206.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/dilation.\u95fdJ12345-768x526.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/dilation.\u95fdJ12345-624x427.jpg 624w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>\u8150\u8680\u7ec6\u8282\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/?attachment_id=2045\" rel=\"attachment wp-att-2045\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-2045\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/erosion.\u95fdJ12345.jpg\" alt=\"\" width=\"800\" height=\"548\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/erosion.\u95fdJ12345.jpg 800w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/erosion.\u95fdJ12345-300x206.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/erosion.\u95fdJ12345-768x526.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/erosion.\u95fdJ12345-624x427.jpg 624w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>\u518d\u6b21\u8f6e\u5ed3\u81a8\u80c0\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/?attachment_id=2044\" rel=\"attachment wp-att-2044\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-2044\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/dilation2.\u95fdJ12345.jpg\" alt=\"\" width=\"800\" height=\"548\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/dilation2.\u95fdJ12345.jpg 800w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/dilation2.\u95fdJ12345-300x206.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/dilation2.\u95fdJ12345-768x526.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/dilation2.\u95fdJ12345-624x427.jpg 624w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>\u8f6e\u5ed3\u8f6c\u6362\u77e9\u5f62\u540e\uff0c\u7b5b\u9009\u51fa\u7684\u9ad8\u5bbd\u6bd4\u6700\u63a5\u8fd1\u8f66\u724c\u7684\u533a\u57df\uff1a<\/p>\n<p>\u5e8f\u53f7 \u9762\u79ef [x1,y1 x2,y2] \u5bbd\u9ad8\u6bd4 \u9762\u79ef\u5360\u6bd4 \u4e0a\u4e0b\u4f4d\u7f6e\u4e0e\u56fe\u7247\u5927\u5c0f\u5408\u7406\u6027 \u5de6\u53f3\u4f4d\u7f6e\u4e0e\u56fe\u7247\u5927\u5c0f\u5408\u7406\u6027 \u5e73\u5747\u5408\u7406\u6027 \u590d\u5408\u6743\u91cd\u6bd4<\/p>\n<p class=\"p1\"><span class=\"s1\">3 8226.5 [291,366 483,437] 2.7 0.031 0.05363 0.00042 0.011 0.0194<\/span><\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/?attachment_id=2072\" rel=\"attachment wp-att-2072\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-2072\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/\u95fdJ12345.regin-1.jpg\" alt=\"\" width=\"800\" height=\"548\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/\u95fdJ12345.regin-1.jpg 800w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/\u95fdJ12345.regin-1-300x206.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/\u95fdJ12345.regin-1-768x526.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/\u95fdJ12345.regin-1-624x427.jpg 624w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p class=\"p1\"><span class=\"s1\">\u4ece\u7070\u5ea6\u56fe\u5bf9\u5e94\u4f4d\u7f6e\u4e2d\u6263\u53d6\u8f6e\u5ed3\u77e9\u5f62\u5e76\u7f29\u653e<\/span>\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/?attachment_id=2067\" rel=\"attachment wp-att-2067\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-2067\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2018\/12\/\u95fdJ12345-3.jpg\" alt=\"\" width=\"180\" height=\"60\"><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>\u8fd9\u4e2a\u65b9\u6cd5\u7684\u5173\u952e\u70b9\u5728\u8fb9\u7f18\u68c0\u6d4b\u540e\u7684\u81a8\u80c0\u8150\u8680\u548c\u8f6e\u5ed3\u7684\u7b5b\u9009\uff0c\u53ef\u4ee5\u901a\u8fc7\u8c03\u8282preprocess<span class=\"s1\">\u548c\u7b5b\u9009\u53c2\u6570\u6765\u4f18\u5316\u6263\u56fe\u6548\u679c\u3002<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>yan 18.12.4 23:45<\/p>\n<p>\u53c2\u8003\uff1ahttps:\/\/blog.csdn.net\/sunny2038\/article\/details\/9170013<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e3a\u4e86\u505a\u8f66\u724c\u8bc6\u522b\u8bad\u7ec3\uff0c\u5148\u5355\u72ec\u7814\u7a76\u4e0b\u600e\u4e48\u4ece\u7167\u7247\u91cc\u6263\u51fa\u8f66\u724c\u533a\u57df\u3002<\/p>\n<p>\u5927\u6982\u601d\u8def\uff1a\u8f6c\u5316\u6210\u7070\u5ea6\u56fe\u3001\u4f7f\u7528\u9ad8\u65af\u5e73\u6ed1\u3001\u4e2d\u503c\u6ee4\u6ce2\u3001Sobel\u8fb9\u7f18\u5316\u68c0\u6d4b\u3001\u81a8\u80c0\u8f6e\u5ed3\u3001\u8150\u8680\u7ec6\u8282\u3001\u8f6e\u5ed3\u7b5b\u9009\u3001\u4fdd\u5b58\u8f6e\u5ed3\u533a\u57df\u539f\u56fe\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[535,539],"tags":[691,690,536,695,694,692,697,696,689,698,693],"_links":{"self":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2041"}],"collection":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2041"}],"version-history":[{"count":0,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2041\/revisions"}],"wp:attachment":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2041"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2041"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2041"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}