Sri Lanka won the toss and sent South Africa in to bat in the second Test at a sold-out Newlands on Monday.
Sri Lanka captain Angelo Mathews said his decision was based on the conditions -- an overcast sky and a pitch which appeared to have more grass than usual.
"There's a lot of grass on the wicket and it seems pretty hard," said Mathews.
"We've got three seamers and myself, so we'll try and take advantage of the conditions."
South Africa captain Faf du Plessis said he expected the bowlers would get some assistance from the pitch early on.
"We're happy with the way pitch looks, the only thing is that there's a bit of cloud cover," he said.
"We expect a little bit of movement so we just have to get through that. We will have to be strong in the first hour and then try and put a big total on the board."
South Africa were unchanged from the team that won the first Test in Port Elizabeth by 206 runs.
Sri Lanka made two changes. Batsman Upul Tharanga replaced Kusal Perera while Lahiru Kumara replaced fellow fast bowler Dushmantha Chameera.
The third and final Test of the series takes place from January 12-16 in Johannesburg.
South Africa: Faf du Plessis (captain), Stephen Cook, Dean Elgar, Hashim Amla, JP Duminy, Temba Bavuma, Quinton de Kock (wkt), Vernon Philander, Keshav Maharaj, Kyle Abbott, Kagiso Rabada.
Sri Lanka: Angelo Mathews (captain), Dimuth Karunaratne, Kaushal Silva, Upul Tharanga, Kusal Mendis, Dinesh Chandimal (wkt), Dhananjaya de Silva, Rangana Herath, Suranga Lakmal, Nuwan Pradeep, Lahiru Kumara.
Umpires: Aleem Dar (PAK), Rod Tucker (AUS)
TV umpire: Bruce Oxenford (AUS)
Match referee: David Boon (AUS)