मेरा लक्ष्य एचएसवी कलर स्पेस का उपयोग करके एक थ्रेस्ड छवि प्रदर्शित करना है जिस तरह से केवल पीले रंग की वस्तुओं को दिखाया जाएगा।एंड्रॉइड - ओपनसीवी का उपयोग करके रंग का पता लगाने - कैसे करें?
protected abstract Bitmap processFrame(VideoCapture capture);
public void run() {
...
bmp = processFrame(mCamera);
...
canvas.drawBitmap(bmp, (canvas.getWidth() - bmp.getWidth())/2, (canvas.getHeight() - bmp.getHeight())/2, null);
...
}
मैं इस मिल:
protected Bitmap processFrame(VideoCapture capture) {
//capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
//Imgproc.cvtColor(mGray, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
capture.retrieve(mHSV, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
Imgproc.cvtColor(mHSV, mRgba, Imgproc.COLOR_RGB2HSV, 4);
//Core.inRange(mRgba, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mRgba);
Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
if (Utils.matToBitmap(mRgba, bmp))
return bmp;
bmp.recycle();
return null;
}
आधार (सार) वर्ग "रन" विधि में शामिल हैं: मैं इस कोड (openCV द्वारा दिए गए एक कोड के आधार पर 2.3.1 एंड्रॉयड नमूने) का उपयोग विकृत पूर्वावलोकन जो मुझे लगता है कि मैं समझ सकता हूं (एचएसवी प्रारूप) लेकिन यह खुद को क्यों दोहरा रहा है (मैं इसे जोर देने के लिए एक हरा रेखा खींचता हूं) 4 बार? और काला क्षैतिज रेखा क्या है? मैं क्या गलत कर रहा हूं?
Imgproc.cvtColor(mHSV, mRgba, Imgproc.COLOR_RGB2HSV, 4);
कारण है कि यह COLOR_RGB2HSV है:
एक आखिरी बात, तर्क के पीछे क्या है? यह COLOR_HSV2RGB नहीं होना चाहिए?
मान लें कि मैंने इस समस्या को पारित किया है, मैं अपने मूल रंग में पीले रंग की वस्तुओं के साथ भूरे स्तर की छवि कैसे बना सकता हूं? मैंने Core.inRange() विधि का उपयोग करने पर सोचा लेकिन जब मैं ऐसा करता हूं तो मुझे ब्लैक स्क्रीन मिलती है।
हाँ, मुझे लगता है कि मैं कुल झटका की तरह दिखता हूं लेकिन मुझे कहीं से शुरू करने की ज़रूरत है, है ना?
10x!
अद्यतन 1: मैं RGB-> HSV-> आरजीबी इस तरह से करने की कोशिश की:
@Override
protected Bitmap processFrame(VideoCapture capture) {
//capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
//Imgproc.cvtColor(mGray, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGB);
Imgproc.cvtColor(mRgba, mHSV, Imgproc.COLOR_RGB2HSV,0);
//Imgproc.cvtColor(mRgba, mRgba, Imgproc.COLOR_BGR2RGB, 4);
//Core.inRange(mRgba, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mRgba);
Imgproc.cvtColor(mHSV,mRgba , Imgproc.COLOR_HSV2RGB,0);
Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
if (Utils.matToBitmap(mRgba, bmp))
return bmp;
bmp.recycle();
return null;
}
और मुझे मिल गया:
?
अद्यतन 2:
मैं अंत में समझते हैं कि एक फ्रेम सेट करने से पहले, यह आरजीबी एक अंतरिक्ष में परिवर्तित किया जाना चाहिए। तो मैं अब इस प्रकार कोड के साथ सीमा की कोशिश की:
capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
Imgproc.cvtColor(mRgba, mHSV, Imgproc.COLOR_RGB2HSV,0);
Core.inRange(mHSV, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mHSVThreshed);
Imgproc.cvtColor(mHSVThreshed, mRgba, Imgproc.COLOR_HSV2RGB, 0);
Imgproc.cvtColor(mRgba, mRgba, Imgproc.COLOR_RGB2RGBA, 0);
Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
लेकिन अब यह मुझे बंद के लिए मजबूर कर देता है ... किसी भी विचार?
मुझे कुछ समय पहले पता था और यह पूछने का सही तरीका नहीं है - लेकिन क्या आपने इसके लिए एक ट्यूटोरियल किया है? क्योंकि मुझे वीडियोकैप्चर काम नहीं मिल रहा है, अगर आप अपना कोड - या जिथब पर अपने कोड के कुछ हिस्सों को प्रदान कर सकते हैं तो मुझे खुशी होगी। बड़ा धन्यवाद – user1651460
अरे वहाँ। मैं वास्तव में माफी चाहता हूं लेकिन यह थोड़ी देर हो गया है क्योंकि मैंने ओपनसीवी के साथ काम किया है, इसके अलावा मेरे पास अब कोड नहीं है। मैं आपको यहां देखने की सलाह देता हूं: http://docs.opencv.org/doc/tutorials/highgui/video-write/video-write.html#videowritehighgui। शुभकामनाएं, कड़ी मेहनत अंततः भुगतान करती है :) – gor