我就廢話不多說了,大家還是直接看代碼吧!
print("thresh =",thresh) coords = np.column_stack(np.where(thresh > 0))//獲取thresh二值灰度圖片中的白色文字區域的點 print("coords =",coords) min_rect = cv2.minAreaRect(coords)//由點集獲取最小矩形(包含中心座標點、寬和高、偏轉角度) print("min_rec =",min_rect) box = cv2.boxPoints(min_rect)//獲取最小矩形的4個頂點座標。
但是通過一下這個繪製矩形函數,畫出來上述的最小矩形與文字區域偏差很大,但是獲取到的偏轉角度是對的。
不明白他們什麼關係啊?
# 根據四點畫原矩形 def drawRect(img, pt1, pt2, pt3, pt4, color, lineWidth): cv2.line(img, tuple(pt1), tuple(pt2), color, lineWidth) cv2.line(img, tuple(pt2), tuple(pt3), color, lineWidth) cv2.line(img, tuple(pt3), tuple(pt4), color, lineWidth) cv2.line(img, tuple(pt1), tuple(pt4), color, lineWidth)
有哪路朋友路過,幫一下忙,給指點一二,多謝朋友
附實驗問題截圖:
補充知識:opencv2 3.2 類中實現提取藍天顏色
我就廢話不多說了,大家還是直接看代碼吧!
#include#include#includeusing namespace std; using namespace cv; class ColorDetector{ private: int maxDist; //最小差距 Vec3b target ; //目標顏色 Mat result; public: ColorDetector():maxDist(100),target(0,0,0) { } void setColorDistanceThreshold(int distance) //設置顏色差距的閾值 { if(distance<0) distance=0; maxDist=distance; } int getColorDistanceThreshold() const //取得顏色差距的閾值 { return maxDist; } void setTargetColor(uchar blue,uchar green,uchar red) //設置需要檢測的顏色 { target=Vec3b(blue,green,red); } void setTargetColor(Vec3b color) { target=color; } Vec3b getTargetColor() const { return target; } Mat process(const cv::Mat &image) ; int getDistance(const Vec3b &color) ; }; Mat ColorDetector::process(const cv::Mat &image) { result.create(image.rows,image.cols,CV_8U); Mat_::const_iterator it=image.begin(); Mat_::const_iterator itend=image.end(); Mat_::iterator itout=result.begin(); for ( ; it!= itend; ++it, ++itout) { if (getDistance(*it)<maxDist) { *itout=255; } else { *itout=0; } } return result; } int ColorDetector::getDistance(const Vec3b &color) { return abs(color[0]-target[0])+ abs(color[1]-target[1])+ abs(color[2]-target[2]); } void main() { ColorDetector cdetect; Mat img=imread("C:UsersAdministratorDesktop工作 estpoldt.jpg"); if(img.empty()) return; cdetect.setTargetColor(230,190,130); imshow("original",img); imshow("result",cdetect.process(img)); waitKey(0); }
[月球人 ] python3+openCV 獲取圖片中文本區域的最小外接矩形實例已經有376次圍觀