日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv实战,钢板焊接点寻找1

發布時間:2024/1/1 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv实战,钢板焊接点寻找1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近做了一個鋼板焊接點尋找項目,記錄一下,哈哈

分為3張圖,分成3個博客講。分別尋找焊接點,因為沒有視頻,只能從圖片中提取。

還有一個問題要求助在第四個博客,我想出一個方法,看看大家有沒有什么更好的辦法,相互學習。

第一張圖,


方法是調濾波迭代值,加houghlinesP(輪廓)。


系統win10,64位,IDE:VS2015。

代碼如下:

//調濾波迭代值,加houghlinesP(輪廓)#include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace std; using namespace cv;Mat g_srcImage, g_dstImage;//原始圖和效果圖 int g_nElementShape = MORPH_RECT;//元素結構的形狀int g_nMaxIterationNum = 10; int g_nOpenCloseNum = 0;static void on_OpenClose(int, void*);//回調函數 static void ShowHelpText();int main() { system("color 2F"); ShowHelpText();g_srcImage = imread("1.jpg"); if (!g_srcImage.data) { printf("Oh,no,讀取srcImage錯誤~! \n"); return false; }namedWindow("【開運算/閉運算】", 1);g_nOpenCloseNum = 21;//9createTrackbar("迭代值", "【開運算/閉運算】", &g_nOpenCloseNum, g_nMaxIterationNum * 2 + 1, on_OpenClose);//輪詢獲取按鍵信息 while (1) { int c;on_OpenClose(g_nOpenCloseNum, 0);c = waitKey(0); //獲取按鍵if ((char)c == 'q' || (char)c == 27) //按下鍵盤按鍵Q或者ESC,程序退出 break;if ((char)c == 49) //鍵盤按鍵1的ASII碼為49,按下鍵盤按鍵1,使用橢圓(Elliptic)結構元素結構元素MORPH_ELLIPSE g_nElementShape = MORPH_ELLIPSE;else if ((char)c == 50) //鍵盤按鍵2的ASII碼為50,按下鍵盤按鍵2,使用矩形(Rectangle)結構元素MORPH_RECT g_nElementShape = MORPH_RECT;else if ((char)c == 51) //鍵盤按鍵3的ASII碼為51,按下鍵盤按鍵3,使用十字形(Cross-shaped)結構元素MORPH_CROSS g_nElementShape = MORPH_CROSS;else if ((char)c == ' ') g_nElementShape = (g_nElementShape + 1) % 3; //按下鍵盤按鍵space,在矩形、橢圓、十字形結構元素中循環 }return 0; }// 【開運算/閉運算】窗口的回調函數static void on_OpenClose(int, void*) {int offset = g_nOpenCloseNum - g_nMaxIterationNum; //偏移量 int Absolute_offset = offset > 0 ? offset : -offset; //偏移量絕對值Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset * 2 + 1, Absolute_offset * 2 + 1), Point(Absolute_offset, Absolute_offset)); //自定義核if (offset < 0)morphologyEx(g_srcImage, g_dstImage, MORPH_OPEN, element);elsemorphologyEx(g_srcImage, g_dstImage, MORPH_CLOSE, element);imshow("【開運算/閉運算】", g_dstImage);//加houghlinesPMat srcImage = g_dstImage; Mat midImage, dstImage; //中間變量和目標圖Canny(srcImage, midImage, 50, 200, 3); cvtColor(midImage, dstImage, COLOR_GRAY2BGR); //轉化為灰度圖vector<Vec4i> lines; HoughLinesP(midImage, lines, 1, CV_PI / 180, 20, 20, 20); //(輸入二值圖像,儲存線條矢量,距離精度,角度精度,閾值參數(大于閾值才可以被檢測返回),最低線段長度(比這個參數短的不能顯示),允許同一行點與點連接的最大距離)for (size_t i = 0; i < lines.size(); i++) //依次在圖中繪制出每條線段 { Vec4i l = lines[i];//斜率過濾 float k = 1.0*(l[3]-l[1])/(l[2]-l[0]); int slop = abs(k); Point a;if (slop <1) //底線 {}else if(slop >= 1) {line(dstImage, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(10, 0, 255), 1, LINE_AA);Point a((l[0]+l[2])/2, (l[1] + l[3]) / 2);circle(dstImage, a, 3, Scalar(0, 255, 0),2);cout << "坐標為(" <<(l[0]+l[2])/2 << "," << (l[0] + l[2]) / 2 << ")" << endl; }}imshow("【效果圖】", dstImage);}static void ShowHelpText() { printf("\n\n\t\t\t 當前使用的OpenCV版本為:" CV_VERSION);//幫助信息 printf("\n\t按鍵操作說明: \n\n" "\t\t鍵盤按鍵【ESC】或者【Q】- 退出程序\n" "\t\t鍵盤按鍵【1】- 使用橢圓(Elliptic)結構元素\n" "\t\t鍵盤按鍵【2】- 使用矩形(Rectangle )結構元素\n" "\t\t鍵盤按鍵【3】- 使用十字型(Cross-shaped)結構元素\n" "\t\t鍵盤按鍵【空格SPACE】- 在矩形、橢圓、十字形結構元素中循環\n"); }

結果:






希望大家能給出更好的建議



總結

以上是生活随笔為你收集整理的opencv实战,钢板焊接点寻找1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。